Вставьте вложенные массивы в sql из python - PullRequest
0 голосов
/ 04 марта 2020

У меня есть список содержит много списков в python.

my_list = [['city', 'state'], ['tampa', 'florida'], ['miami','florida']]

Вложенный список с индексом 0 содержит заголовки столбцов, а остальные вложенные списки содержат соответствующие значения. Как мне вставить это в sql сервер, используя pyodb c или slqalchemy? Я использовал pandas pd.to_ sql и хочу сделать этот процесс в чистом python. Любая помощь будет принята с благодарностью.

ожидаемая таблица вывода будет выглядеть так:

city |state
-------------
tampa|florida
miami|florida

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Поскольку имена столбцов берутся из вашего списка, вам нужно создать строку запроса для вставки значений. Имена столбцов и таблиц не могут быть параметризованы с помощью заполнителей (?).

import pyodbc 

conn = pyodbc.connect(my_connection_string)
cursor = conn.cursor()

my_list = [['city', 'state'], ['tampa', 'florida'], ['miami','florida']]

columns = ','.join(my_list[0]) #String of column names
values = ','.join(['?'] * len(my_list[0])) #Placeholders for values
query = "INSERT INTO mytable({0}) VALUES ({1})".format(columns, values)

#Loop through rest of list, inserting data
for l in my_list[1:]:
    cursor.execute(query, l)
conn.commit() #save changes

Обновление:

Если у вас есть большое количество записей для вставки можно сделать это за один go, используя executemany. Измените код следующим образом:

columns = ','.join(my_list[0]) #String of column names
values = ','.join(['?'] * len(my_list[0])) #Placeholders for values
#Bulk insert
query = "INSERT INTO mytable({0}) VALUES ({1})".format(columns, values)
cursor.executemany(query, my_list[1:])
conn.commit() #save change
0 голосов
/ 04 марта 2020

Поскольку значения столбцов являются первыми элементами в массиве, просто выполните:

q ="""CREATE TABLE IF NOT EXISTS stud_data (`{col1}` VARCHAR(250),`{col2}` VARCHAR(250); """
sql_cmd = q.format(col1 = my_list[0][0],col2 = my_list[0][1])

mcursor.execute(sql)#Create the table with columns

Теперь, чтобы добавить значения в таблицу, выполните:

for i in range(1,len(my_list)-1):
   sql = "INSERT IGNORE into test_table(city,state) VALUES (%s, %s)"
   mycursor.execute(sql,my_list[i][0],my_list[i][1])
mycursor.commit()
print(mycursor.rowcount, "Record Inserted.")#Get count of rows after insertion

0 голосов
/ 04 марта 2020

Предполагается, что conn уже открыто соединение с вашей базой данных:

cursor = conn.cursor()
for row in my_list:
    cursor.execute('INSERT INTO my_table (city, state) VALUES (?, ?)', row)
cursor.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...