注册

达梦数据库获取自增ID异常

陈沛鑫 2025/06/30 90 1

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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

但与表里的实际数据不匹配
image.png

回答 0
暂无回答
扫一扫
联系客服