SQL Alchemy 2.0 反映 Oracle 表

0 投票
1 回答
31 浏览
提问于 2025-04-14 17:40

我一直在找关于 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数据库中表名的大小写如何,我都应该始终使用小写的表名来进行表的反射操作。

撰写回答