Вставка выборочных столбцов в postgres с использованием pandas python - PullRequest
0 голосов
/ 14 сентября 2018

Цель - записать данные столбца Excel в таблицу postgres. Но имена всех столбцов в excel не совпадают с столбцом таблицы.Поэтому я пытаюсь вставить только общие столбцы.Я могу получить общие данные в наборе.

Я застрял в том, как вставить данные в один запрос.

Я использую pandas dataframe.

 #Getting table columns in a list
    conn = psycopg2.connect(dbname=dbname, host=host, port=port, user=user, password=pwd)
    print("Connecting to Database")
    cur = conn.cursor()
    cur.execute("SELECT * FROM " + table_name + " LIMIT 0")
    table_columns = [desc[0] for desc in cur.description]
    #print table_columns

    #Getting excel sheet columns in a list
    df = pd.read_excel('/Users/.../plans.xlsx', sheet_name='plans')
    engine = create_engine('postgresql://postgres:postgres@localhost:5432/test_db')
    column_list = df.columns.values.tolist()
    #print(column_list)
    s = set(column_list).intersection(set(table_columns))
    for x in df['column_1'] :
        sql = "insert into test_table(column_1) values ('" + x + "')"
        cur.execute(sql)
        cur.execute("commit;")

    conn.close()

обновить код на основе ответов, нопри этом каждый раз, когда я запускаю программу, она вставляет новые записи.Есть ли вариант, где я могу просто сделать обновление.

 s = set(column_list).intersection(set(table_columns))

    df1 = df[df.columns.intersection(table_columns)]

    #print df1
    df1.to_sql('medical_plans', con=engine, if_exists='append', index=False, index_label=None)

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете объединить все значения из набора в одну строку и передать ее в свой запрос:

df = {'column_1':[1,2,3,4,5,6,7]}
all_vals = ','.join(map(str,df['column_1']))

строка запроса может быть создана примерно так:

sql = "insert into test_table(column_1) values ('{vals}')".format(vals=all_vals)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...