我想获取最后插入的主键,对此我已经知道两种方法:
1)“ lastrowid”与“原始SQL”
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, text
engine = create_engine('sqlite://')
meta = MetaData()
tbl = Table('tbl', meta,
Column('f1', Integer, primary_key=True),
Column('f2', String(64))
)
tbl.create(engine)
sql = text("INSERT INTO tbl VALUES (NULL, 'some_data')")
res = engine.execute(sql)
print(res.lastrowid)
2)带“ insert()”的“ inserted_primary_key”
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite://')
meta = MetaData()
tbl = Table('tbl', meta,
Column('f1', Integer, primary_key=True),
Column('f2', String(64))
)
tbl.create(engine)
ins = tbl.insert().values(f2='some_data')
res = engine.execute(ins)
print(res.inserted_primary_key)
但我的问题是“ declarative_base()”
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite://')
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
class TBL(Base):
__tablename__ = 'tbl'
f1 = Column(Integer, primary_key=True)
f2 = Column(String(64))
Base.metadata.create_all(engine)
rcd = TBL(f2='some_data')
session.add(rcd)
session.commit()
如果我这样做:
res = session.add(rcd)
它给我“无”。或者如果我这样做:
res = session.commit()
同样的事情发生了。我的问题是:
在“ declarative_base()”的情况下,有什么好的方法来访问“ lastrowid”或“ inserted_primary_key”吗?
最好的方法是什么?
调用后session.commit()
,访问rcd.f1
将返回其生成的主键。在提交到期后,SQLAlchemy会自动从数据库中重新加载对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句