Есть ли способ вставить в таблицу значения в виде массива?

#python #sql #sqlite

#питон #sql #sqlite #python

Вопрос:

Я хочу вставить новую запись в таблицу, и я получаю значение каждого столбца в качестве индекса массива. Поэтому, когда я пытаюсь добавить это, я делаю это:

 query = """INSERT INTO table VALUES(?, ?, ?)"""

cursor.execute(query, (data,))

connection.commit()
  

Я также должен сделать то же самое для больших списков данных, поэтому был бы высоко оценен более приятный способ, чем вызов data [0], data[1], data[2]

Комментарии:

1. в чем именно проблема? код, который вы показываете здесь, будет способом вставки последовательности значений

2. @aws_apprentice Я получаю ошибку ValueError: параметры имеют неподдерживаемый тип

3. давайте посмотрим некоторые примеры данных, а также определение таблицы

Ответ №1:

Я не совсем уверен, правильно ли я вас понял, когда вы сказали, что я получаю значение каждого столбца в качестве индекса массива, но предположим, что у вашего пользователя в таблице есть столбцы firstname, lastname, age, а ваши данные примерно следующие

data = [[«Ханс», «Мустер», 23], [«Джейн», «Доу», 46], [«Джон», «Доу», 26]]

Два возможных коротких способа добиться вставки были бы..

Вариант 1 — Вы можете выполнять итерации и сохранять по одной записи за раз

 # get connection and cursor object
query= "INSERT INTO PERSON (FIRSTNAME, LASTNAME, AGE) VALUES (%s, %s, %s)"
for rec in data:
    record = tuple(rec)
    cursor.execute(query, record)    
#handle commit or rollback as necessary
  

Вариант 2 — вы можете использовать executemany для сохранения всех записей за один раз

 # get connection and cursor object   
query= "INSERT INTO PERSON (FIRSTNAME, LASTNAME, AGE) VALUES (%s, %s, %s)"
tupleRecords = [tuple(rec) for rec in data]  
cursor.executemany(query, tupleRecords)
#handle commit or rollback as necessary
  

Ответ №2:

Вы могли бы сделать что-то вроде приведенного ниже, чтобы вставить список значений. Источник: https://www.w3schools.com/python/python_mysql_insert.asp

 import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  passwd="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = [
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633')
]

mycursor.executemany(sql, val)

mydb.commit()

print(mycursor.rowcount, "was inserted.") 
  

Комментарии:

1. OP должен уточнить и предоставить некоторые примеры данных, учитывая, что ошибка, которую они получают, связана не с тем, как они выполняют операцию, а с самими данными