为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:kylin
【CPU】:arm
【问题描述】*:Pythom sqlalchemy框架通过orm的方式插入一条数据,然后orm对象上补充的自增id为0,请问是包有问题还是我的用法问题呢?或者有没有其他方式可以获取到插入数据的自增id?辛苦老师们帮忙看看
Python环境
python版本:3.7.0
dmPython:2.3
sqlalchemy-dm:1.1.10
表定义为:
CREATE TABLE IF NOT EXISTS mytable (
primary_id bigint PRIMARY KEY IDENTITY(1,1),
uname varchar(64) NULL DEFAULT NULL
);
Python脚本:
from utils import get_session
from sqlalchemy import Table, MetaData, Column, INTEGER, VARCHAR
from sqlalchemy.orm import mapper
class Mytable:
def __init__(self, primary_id=None, uname=None):
self.primary_id = primary_id
self.uname = uname
mytable = Table(
'mytable', MetaData(),
Column('primary_id', INTEGER, primary_key=True, autoincrement=True),
Column('uname', VARCHAR(64), nullable=True),
)
mapper(Mytable, mytable)
session = get_session()
po = Mytable(uname = "AAA")
session.add(po)
print(po.__dict__)
# 输出为:{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0xfffe8b8f6690>, 'primary_id': None, 'uname': 'AAA'}
session.flush()
print('after flush', po.__dict__)
# 输出为:after flush {'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0xfffe8b8f6690>, 'primary_id': 0, 'uname': 'AAA'}
session.commit()
print('after commit', po.__dict__)
# 输出为:after commit {'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0xfffe8b8f6690>}
session.close();