SQL Alchemy 2.0 反映 Oracle 表
我一直在找关于 SQL Alchemy 2.0 以上版本的问题,但没有找到相关的信息,都是一些旧版本的内容。
我已经成功连接到 Oracle 数据库,并且可以通过执行 text("sql script")
来查询数据。
连接的代码是:
engine = create_engine(f"oracle+oracledb://{user}:{pass}@{dsn}",echo='debug')
正如我所说,这个连接是没问题的。之后我只剩下:
meta = MetaData()
table = Table(name, meta, schema='user', autoload_with=engine)
现在我想做的就是反射那个表。我之前在 SQL Server 数据库上做过类似的事情,一切都很顺利,没有任何问题。然而,当我运行上面的代码时,我得到了:
sqlalchemy.exc.NoSuchTableError: name
尽管从调试信息来看,我可以看到 SQL 正在 Oracle 上运行以获取元数据,并且实际上返回了所有应该返回的内容。在查询 Oracle 的 all_tab_cols 时,它返回了表的所有列、数据类型等等。获取索引的查询也返回了该表的所有信息。
我还尝试了在 reflection.py 的文档字符串中提到的 reflect_table 方法。
engine = create_engine('...')
meta = MetaData()
table = Table('user', meta)
insp = inspect(engine)
insp.reflect_table(table, None)
结果还是同样的错误,尽管所有在 Oracle 上运行的 SQL 似乎都返回了该表的信息。
1 个回答
1
问题在于,不管在Oracle数据库中表名的大小写如何,我都应该始终使用小写的表名来进行表的反射操作。