Как вставить значение в уже созданную таблицу базы данных через pandas `df.to_sql ()` - PullRequest
1 голос
/ 19 апреля 2019

Я создаю новую таблицу, затем вставляю в нее значения, потому что в файле tsv нет заголовков, поэтому мне нужно сначала создать структуру таблицы, а затем вставить значение. Я пытаюсь вставить значение в таблицу базы данных, которая была создана. Я использую функцию df.to_sql для вставки tsv значений в таблицу базы данных, но она создает таблицу, но она не вставляет значения в эту таблицу и не выдает никаких ошибок.

Я попытался создать новую таблицу с помощью значений sqalchemy и insert, но это не сработало для уже созданной таблицы.

conn, cur = create_conn()

engine = create_engine('postgresql://postgres:Shubham@123@localhost:5432/walmart')

create_query = '''create table if not exists new_table(
                "item_id" TEXT, "product_id" TEXT, "abstract_product_id" TEXT, 
           "product_name" TEXT, "product_type" TEXT, "ironbank_category" TEXT, 
          "primary_shelf" TEXT, apparel_category" TEXT, "brand" TEXT)'''

cur.execute(create_query)
conn.commit()
file_name = 'new_table'
new_file = "C:\\Users\\shubham.shinde\\Desktop\\wallll\\new_file.txt"
data = pd.read_csv(new_file, delimiter="\t", chunksize=500000, error_bad_lines=False, quoting=csv.QUOTE_NONE, dtype="unicode", iterator=True)
with open(file_name + '_bad_rows.txt', 'w') as f1:
    sys.stderr = f1
    for df in data:
        df.to_sql('new_table', engine, if_exists='append')
data.close()

Я хочу вставить значения из df.to_sql() в таблицу базы данных

1 Ответ

0 голосов
/ 19 апреля 2019

Не уверен на 100%, работает ли этот аргумент с postgresql, но у меня была похожая проблема при работе с mssql. .to_sql() уже создает таблицу в первом аргументе метода в new_table. if_exists = append также не проверяет дубликаты значений. Если данные в new_file будут перезаписаны или снова пройдены через вашу функцию, они просто добавятся в таблицу. Относительно того, почему вы видите имя таблицы, но не видите данных в ней, может быть связано с размером df. Попробуйте установить fast_executemany=True в качестве второго аргумента create_engine.

Мое предложение, избавьтесь от create_query и обрабатывайте типы данных после to_sql(). Как только таблица SQL создана, вы можете использовать вашу фактическую таблицу SQL и присоединиться к этой промежуточной таблице для дублирования тестирования. Недубликаты могут быть записаны в фактическую таблицу, преобразовав типы данных в UPDATE для соответствия структуре типов данных таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...