为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:达梦v8
【操作系统】:ubuntu
【CPU】:Linux 4.19.90-52.44.v2207.ky10.x86_64 #3 SMP Sat Feb 8 14:30:49 CST 2025 x86_64 GNU/Linux
【问题描述】*:无法正确获取自增ID
dmPython==2.5.22
dmSQLAlchemy==2.0.2
SQLAlchemy==2.0.41
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from urllib.parse import quote
from sqlalchemy.orm import declarative_base
import sqlalchemy as sa
Base = declarative_base()
class TestUserPO(Base):
__tablename__ = 'test_users'
__table_args__ = (
{
'comment': '测试表格',
},
)
uid = sa.Column(sa.BIGINT, autoincrement=True, primary_key=True, comment='主键')
username = sa.Column(sa.String(100), default='', comment='用户名')
nickname = sa.Column(sa.String(100), default='', comment='昵称')
db_user = 'user'
db_password = quote('password')
db_host = '127.0.0.1'
db_port = 5328
db_name = 'some_db'
db_url = f'dm+dmPython://{db_user}:{db_password}@{db_host}:{db_port}?schema={db_name}'
engine = create_engine(db_url, pool_size=10, max_overflow=5, pool_recycle=7200)
Session = sessionmaker(bind=engine)
def run(session):
user_po = TestUserPO(
username='test_name',
nickname='无法获取uid',
)
session.add(user_po)
session.commit()
print(user_po.uid)
def main():
with Session() as session:
run(session)
main()
# python ./test.py
Traceback (most recent call last):
File "./test.py", line 53, in <module>
main()
File "./test.py", line 50, in main
run(session)
File "./test.py", line 45, in run
print(user_po.uid)
^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/attributes.py", line 566, in __get__
return self.impl.get(state, dict_) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/attributes.py", line 1086, in get
value = self._fire_loader_callables(state, key, passive)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/attributes.py", line 1116, in _fire_loader_callables
return state._load_expired(state, passive)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/state.py", line 803, in _load_expired
self.manager.expired_attribute_loader(self, toload, passive)
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/loading.py", line 1682, in load_scalar_attributes
raise orm_exc.ObjectDeletedError(state)
sqlalchemy.orm.exc.ObjectDeletedError: Instance '<TestUserPO at 0x7f89b032fed0>' has been deleted, or its row is otherwise not present.
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from urllib.parse import quote
from sqlalchemy.orm import declarative_base
import sqlalchemy as sa
Base = declarative_base()
class TestUserPO(Base):
__tablename__ = 'test_users'
__table_args__ = (
{
'comment': '测试表格',
},
)
uid = sa.Column(sa.BIGINT, autoincrement=True, primary_key=True, comment='主键')
username = sa.Column(sa.String(100), default='', comment='用户名')
nickname = sa.Column(sa.String(100), default='', comment='昵称')
db_user = 'user'
db_password = quote('password')
db_host = '127.0.0.1'
db_port = 5328
db_name = 'some_db'
db_url = f'dm+dmPython://{db_user}:{db_password}@{db_host}:{db_port}?schema={db_name}'
engine = create_engine(db_url, pool_size=10, max_overflow=5, pool_recycle=7200)
Session = sessionmaker(bind=engine)
def run(session):
user_po = TestUserPO(
username='test_name',
nickname='无法获取uid',
)
session.add(user_po)
session.flush()
print(user_po.uid)
session.commit()
def main():
with Session() as session:
run(session)
main()
# python ./test.py
4001
但与表里的实际数据不匹配
@潘翔