python - не могу загрузить таблицу со схемой в postgres, используя панд - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь создать коллекцию таблиц в базе данных, принадлежащих одной схеме. Вот упрощенный пример моей проблемы.

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 ??

...