0

我正在使用 python 的odo将数据从 pandas 数据框移动到 postgresql 数据库。目标是每个“用户”在他们的模式中看到他们自己的数据,但在“用户”之间具有相同的数据模型和表/视图命名模式。使用普通 SQL,我可以这样做:

CREATE SCHEMA my_schema;
CREATE TABLE my_schema.my_table AS select 1;

我的 DB 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')

这给了我这个 Traceback

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)
4

1 回答 1

0

隐藏在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')
于 2018-09-01T21:18:11.623 回答