我应该从oracle数据库中提取数据.如何找出数据库中定义的模式?当我没有在Metadata()的描述中定义任何模式时,我找不到表.谢谢你的帮助,
vvl*_*rov 11
默认Oracle模式与Oracle连接中使用的用户名匹配.如果您没有看到任何表 - 这意味着表是在另一个模式中创建的.
看起来你有两个问题:
1)关于Oracle模式 - 如何在Oracle中查找模式和表
2)关于SQLAlchemy的思考 - 如何为表指定Oracle模式
你可以在很多地方找到第一个问题的答案.即:https://stackoverflow.com/a/2247758/1296661
回答第二个问题:表类构造函数具有schema参数,用于指定表的模式(如果它与默认用户的模式不同).点击此处查看更多信息 http://docs.sqlalchemy.org/en/rel_0_7/core/schema.html#sqlalchemy.schema.Table
这是回答第二个问题的python代码.您需要设置数据库连接和表名称值以匹配您的案例:
from sqlalchemy import Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
engine = create_engine('oracle://<user_name>:<password>@<hostname>:1521/<instance name>', echo=True)
Base = declarative_base()
reflected_table = Table('<Table name>',
Base.metadata,
autoload=True,
autoload_with=engine,
schema='<Schema name other then user_name>')
print [c.name for c in reflected_table.columns]
p = engine.execute("SELECT OWNER,count(*) table_count FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' GROUP BY OWNER");
for r in p:
print r
Run Code Online (Sandbox Code Playgroud)
祝你好运使用sqlschema和反射功能 - 这很有趣.您可以使用现有数据库处理python程序,而无需在程序中定义架构信息.
我在生产中使用oracle db这个特性 - 我唯一需要定义的是显式设置外键和主键的表之间的关系.
| 归档时间: |
|
| 查看次数: |
5142 次 |
| 最近记录: |