Я пытаюсь создать коллекцию таблиц в базе данных, принадлежащих одной схеме. Вот упрощенный пример моей проблемы.
from sqlalchemy.schema import CreateSchema
import sqlalchemy as sqla
import pandas as pd
# I have the database 'db' already created and owned by 'user'
db_url = 'postgresql://user:password@host:5432/db'
# Let's connect to it via sqla
conn = sqla.create_engine(db_url)
# My db is currently empty, let's first create a schema and then populate it
conn.execute(CreateSchema('my_schema'))
# Verify the schema has been added to the db
insp = sqla.inspect(conn)
schema_list = insp.get_schema_names() #checking this variable, it has indeed
# I create a dataframe
df = pd.DataFrame({'foo': [1,2], 'bar':[3,4]})
Теперь запутанная часть. Если я сделаю это:
df.to_sql('my_table', db_url)
Тогда все отлично работает, я получаю:
db=> \dt
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------------
public | my_table | table | user
(1 row)
Однако, если я добавлю схему в качестве параметра df.to_sql('my_table', db_url, schema='my_schema')
, таблица не будет загружена, я получу
db=> \dt
No relations found.
Почему pd.df.to_sql не работает, когда я указываю схему?
UPDATE
db=> \dt my_schema.*
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------------
my_schema | my_table | table | user
Это показывает, что таблица действительно создается и присоединяется к намеченной схеме. Тем не менее, это все еще часть БД? Почему он не отображается под \ dt ??