我正在使用python的odo将数据从熊猫数据框移动到Postgresql数据库。目标是每个“用户”在其架构中看到自己的数据,但在“用户”之间具有相同的数据模型和表/视图命名架构。使用普通的SQL,我可以做到这一点:
CREATE SCHEMA my_schema;
CREATE TABLE my_schema.my_table AS select 1;
我的数据库URI看起来像这样
db_uri = 'postgresql://localhost/postgres::my_schema.my_table'
这为我提供了default
模式中名为“ my_schema.my_table”的表,包括“。”。在表名中,而不是在模式“ my_schema”中名为“ my_table”的表中。
我已经基于此github issue尝试了不同的组合,例如:
db_uri = 'postgresql://localhost/postgres.schema::tmp')
这给了我这个追溯
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: database "postgres/schema" does not exist
还有这个
db_uri = 'postgresql://localhost/postgres::my_schema/my_table'
这给了我名为“ my_schema / my_table”的表。
这是示例代码:
import pandas as pd
from odo import odo
db_uri = 'postgresql://localhost/postgres::my_schema.my_table'
odo(pd.DataFrame([{'a': 1}, {'a': 1}]), db_uri)
答案 0 :(得分:0)
隐藏在mailing list for blaze中的位置是对schema
参数的提及
d = Data(resource('postgresql://localhost/db::t', schema='myschema'))
可以与以下格式的odo一起使用:
from odo import odo, drop
drop(db_uri, schema='my_schema') # to drop table in specific schema
odo(data, db_uri, schema='my_schema')
工作代码
import pandas as pd
from odo import odo
db_uri = 'postgresql://localhost/postgres::my_table'
odo(pd.DataFrame([{'a': 1}, {'a': 1}]), db_uri, schema='my_schema')