我想获得最后插入的主键,我已经知道两种方式:
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)
Run Code Online (Sandbox Code Playgroud)
2)"inserted_primary_key",带有"insert()"
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)
Run Code Online (Sandbox Code Playgroud)
但我的问题是"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()
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
res = session.add(rcd)
Run Code Online (Sandbox Code Playgroud)
它给了我"没有".或者如果我这样做:
res = session.commit()
Run Code Online (Sandbox Code Playgroud)
同样的事情发生了.我的问题是:
在"declarative_base()"的情况下,有没有什么好方法可以访问"lastrowid"或"inserted_primary_key"?
什么是最好的方法?
| 归档时间: |
|
| 查看次数: |
5734 次 |
| 最近记录: |