使用python的odo插入到特定于模式的表

时间:2018-09-01 21:06:59

标签: python postgresql pandas blaze odo

我正在使用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)

1 个答案:

答案 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')