注册

Python-sqlalchemy出现[CODE:-2106]无效的表或视图名

憧憬 2024/08/27 478 6

【DM版本】:V8
【操作系统】:Windows11
【CPU】: Intel i7-13700H
【问题描述】*:sqlalchemy create_all()/drop_all() 都能成功, 新增数据的时候找不到对应的表,数据库里面是有的。。。。
Dingtalk_20240827191713.jpg

【补充】:数据库机器是 Linux rocky 8.9 dm8 版本, sqlalchemy-dm 是在开发机上-dm8客户端 下编译的

SQLAlchemy 2.0.23
sqlalchemy-dm 2.0.1
dmPython 2.5.5
python 3.11

测试demo如下

from sqlalchemy import create_engine, Index, ForeignKey, text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import Column, Integer, String # 创建基类 Base = declarative_base() db_schema = 'HELLO' class BaseModel(Base): __abstract__ = True __table_args__ = {"schema": db_schema} class Task(BaseModel): __tablename__ = 'TB_TASK' ID = Column(Integer, primary_key=True) NAME = Column(String(50)) medias = relationship('TaskMedias', backref=f'TASK') class TaskMedias(BaseModel): __tablename__ = 'TB_TASK_MEDIAS' ID = Column(Integer, primary_key=True) GUID = Column(String(50)) TASK_ID = Column(Integer, ForeignKey(f'{db_schema}.TB_TASK.ID')) # 添加索引 __table_args__ = ( Index('idx_guid', 'GUID', unique=True), {"schema": db_schema}, ) # 创建数据库引擎 engine = create_engine(f"dm://SYSDBA:SYSDBA@172.16.147.212:5237", echo=True) # 创建会话 Session = sessionmaker(bind=engine) session = Session() session.execute(text(f"CREATE SCHEMA {db_schema}")) print(session.execute(text('SELECT SF_GET_CASE_SENSITIVE_FLAG()')).scalar()) # 创建所有表 Base.metadata.create_all(engine) t = Task(NAME='task1') session.add(t) session.commit() query_data = session.query(Task).all() print(query_data)

输出:

2024-08-27 18:02:35,115 INFO sqlalchemy.engine.Engine SELECT USER FROM DUAL
2024-08-27 18:02:35,116 INFO sqlalchemy.engine.Engine [generated in 0.00032s] []
2024-08-27 18:02:35,117 INFO sqlalchemy.engine.Engine SELECT USER FROM DUAL
2024-08-27 18:02:35,118 INFO sqlalchemy.engine.Engine [cached since 0.002281s ago] []
2024-08-27 18:02:35,120 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2024-08-27 18:02:35,120 INFO sqlalchemy.engine.Engine CREATE SCHEMA HELLO
2024-08-27 18:02:35,120 INFO sqlalchemy.engine.Engine [generated in 0.00009s] []
2024-08-27 18:02:35,127 INFO sqlalchemy.engine.Engine SELECT SF_GET_CASE_SENSITIVE_FLAG()
2024-08-27 18:02:35,127 INFO sqlalchemy.engine.Engine [generated in 0.00023s] []
0
2024-08-27 18:02:35,146 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2024-08-27 18:02:35,147 INFO sqlalchemy.engine.Engine SELECT name FROM sysobjects WHERE name = ? AND schid = SF_GET_SCHEMA_ID_BY_NAME(?)
2024-08-27 18:02:35,147 INFO sqlalchemy.engine.Engine [generated in 0.00029s] ['TB_TASK', 'HELLO']
2024-08-27 18:02:35,150 INFO sqlalchemy.engine.Engine SELECT name FROM sysobjects WHERE name = ? AND schid = SF_GET_SCHEMA_ID_BY_NAME(?)
2024-08-27 18:02:35,150 INFO sqlalchemy.engine.Engine [cached since 0.003196s ago] ['TB_TASK_MEDIAS', 'HELLO']
2024-08-27 18:02:35,152 INFO sqlalchemy.engine.Engine 
CREATE TABLE "HELLO"."TB_TASK" (
	"ID" INTEGER NOT NULL IDENTITY(1,1), 
	"NAME" VARCHAR2(50 CHAR), 
	PRIMARY KEY ("ID")
)


2024-08-27 18:02:35,153 INFO sqlalchemy.engine.Engine [no key 0.00016s] []
2024-08-27 18:02:35,161 INFO sqlalchemy.engine.Engine 
CREATE TABLE "HELLO"."TB_TASK_MEDIAS" (
	"ID" INTEGER NOT NULL IDENTITY(1,1), 
	"GUID" VARCHAR2(50 CHAR), 
	"TASK_ID" INTEGER, 
	PRIMARY KEY ("ID"), 
	FOREIGN KEY("TASK_ID") REFERENCES "HELLO"."TB_TASK" ("ID")
)


2024-08-27 18:02:35,161 INFO sqlalchemy.engine.Engine [no key 0.00014s] []
2024-08-27 18:02:35,168 INFO sqlalchemy.engine.Engine CREATE UNIQUE INDEX "HELLO".idx_guid ON "HELLO"."TB_TASK_MEDIAS" ("GUID")
2024-08-27 18:02:35,168 INFO sqlalchemy.engine.Engine [no key 0.00018s] []
2024-08-27 18:02:35,177 INFO sqlalchemy.engine.Engine COMMIT
2024-08-27 18:02:35,186 INFO sqlalchemy.engine.Engine INSERT INTO "HELLO"."TB_TASK" ("NAME") VALUES (?)
2024-08-27 18:02:35,186 INFO sqlalchemy.engine.Engine [generated in 0.00026s] ['task1']
2024-08-27 18:02:35,190 INFO sqlalchemy.engine.Engine ROLLBACK
Traceback (most recent call last):
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy\engine\base.py", line 1985, in _exec_single_context
    result = context._setup_result_proxy()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy\engine\default.py", line 1791, in _setup_result_proxy
    result = self._setup_dml_or_text_result()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy\engine\default.py", line 1876, in _setup_dml_or_text_result
    self._setup_ins_pk_from_lastrowid()
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy_dm-2.0.1-py3.11.egg\sqlalchemy_dm\base.py", line 1664, in _setup_ins_pk_from_lastrowid
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy_dm-2.0.1-py3.11.egg\sqlalchemy_dm\base.py", line 1665, in <listcomp>
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy_dm-2.0.1-py3.11.egg\sqlalchemy_dm\base.py", line 1630, in _set_autoinc_col_from_lastrowid
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy_dm-2.0.1-py3.11.egg\sqlalchemy_dm\base.py", line 1825, in do_execute
  File "D:\env\py311\aiserver_env\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
dmPython.DatabaseError: [CODE:-2106]第1 行附近出现错误:
无效的表或视图名[TB_TASK]

model中字段设置为大写/小写 都会出现这个错误

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