Я использую Python odo для перемещения данных из фрейма данных pandas в базу данных 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_table" в схеме "my_schema".
Я пробовал разные комбинации на основе этой проблемы github , например:
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)