为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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
【问题描述】*:运行报错
【python版本】3.11.12
# pip freeze
dmPython==2.5.11
greenlet==3.2.3
SQLAlchemy==1.4.6
sqlalchemy-dm==1.4.39
验证脚本
from urllib.parse import quote
import sqlalchemy as sa
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class TestTable(Base):
__tablename__ = 'test_table'
uid = sa.Column(sa.BigInteger, primary_key=True, autoincrement=True)
username = sa.Column(sa.String(200), nullable=False)
nickname = sa.Column(sa.String(200), nullable=True)
def main():
host = '127.0.0.1'
port = 5328
user = 'dm_user'
password = quote('dm_password')
url = f'dm+dmPython://{user}:{password}@{host}:{port}/?schema=demo_db'
print(f'{url = !r}')
engine = create_engine(
url=url,
echo=True,
)
Session = sessionmaker(bind=engine)
with Session() as session:
po = TestTable(username='hello')
session.add(po)
session.commit()
main()
运行报错
# python ./test.py
2025-06-26 15:16:11,703 INFO sqlalchemy.engine.Engine SELECT USER FROM DUAL
2025-06-26 15:16:11,703 INFO sqlalchemy.engine.Engine [raw sql] []
2025-06-26 15:16:11,704 INFO sqlalchemy.engine.Engine SELECT USER FROM DUAL
2025-06-26 15:16:11,704 INFO sqlalchemy.engine.Engine [raw sql] []
2025-06-26 15:16:11,705 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2025-06-26 15:16:11,707 INFO sqlalchemy.engine.Engine INSERT INTO test_table (username, nickname) VALUES (?, ?)
2025-06-26 15:16:11,707 INFO sqlalchemy.engine.Engine [generated in 0.00038s] ['hello', None]
2025-06-26 15:16:11,708 INFO sqlalchemy.engine.Engine ROLLBACK
Traceback (most recent call last):
File "/root/./test.py", line 43, in <module>
main()
File "/root/./test.py", line 40, in main
session.commit()
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 1415, in commit
self._transaction.commit(_to_root=self.future)
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 829, in commit
self._prepare_impl()
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 3233, in flush
self._flush(objects)
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 3372, in _flush
with util.safe_reraise():
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
compat.raise_(
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 3333, in _flush
flush_context.execute()
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/unitofwork.py", line 453, in execute
rec.execute(self)
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/unitofwork.py", line 627, in execute
util.preloaded.orm_persistence.save_obj(
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/persistence.py", line 242, in save_obj
_emit_insert_statements(
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/orm/persistence.py", line 1219, in _emit_insert_statements
result = connection._execute_20(
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1520, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/sql/elements.py", line 313, in _execute_on_connection
return connection._execute_clauseelement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1389, in _execute_clauseelement
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1748, in _execute_context
self._handle_dbapi_exception(
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1933, in _handle_dbapi_exception
util.raise_(exc_info[1], with_traceback=exc_info[2])
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/base.py", line 1721, in _execute_context
result = context._setup_result_proxy()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 1377, in _setup_result_proxy
result = self._setup_dml_or_text_result()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/sqlalchemy/engine/default.py", line 1443, in _setup_dml_or_text_result
self._setup_ins_pk_from_lastrowid()
File "/usr/local/lib/python3.11/site-packages/sqlalchemy_dm-1.4.39-py3.11.egg/sqlalchemy_dm/base.py", line 1674, in _setup_ins_pk_from_lastrowid
AttributeError: 'PrimaryKeyConstraint' object has no attribute 'c'
版本兼容性的问题,使用pip install dmPython和pip install dmsqlalchemy在线安装新版本驱动试试