Есть ли способ вставить в таблицу со значениями в виде массива? - PullRequest
0 голосов
/ 24 марта 2019

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

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

cursor.execute(query, (data,))

connection.commit()

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

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

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

data = [["Hans", "Muster", 23], ["Jane", "Doe", 46], ["John", "Doe", 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
0 голосов
/ 24 марта 2019

Вы можете сделать что-то вроде ниже, чтобы вставить список значений. Источник: 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.") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...