Python и SQLite: вставить в таблицу - PullRequest
43 голосов
/ 19 января 2010

У меня есть список из 3 строк, каждая из которых представляет строку таблицы:

>>> print list
[laks,444,M]
[kam,445,M]
[kam,445,M]

Как вставить этот список в таблицу?

Моя структура таблицы:

tablename(name varchar[100], age int, sex char[1])

Или я должен использовать что-то кроме списка?

Вот фактическая часть кода:

    for record in self.server:
        print "--->",record
        t=record
        self.cursor.execute("insert into server(server) values (?)",(t[0],));
        self.cursor.execute("insert into server(id) values (?)",(t[1],))
        self.cursor.execute("insert into server(status) values (?)",(t[2],));

Вставка трех полей по отдельности работает, но с использованием одной строки, например

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t[0],),(t[1],),(t[2],))

или

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t),)

нет.

Ответы [ 5 ]

77 голосов
/ 16 мая 2011

есть лучший способ

# Larger example
rows = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
        ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
        ('2006-04-06', 'SELL', 'IBM', 500, 53.00)]
c.executemany('insert into stocks values (?,?,?,?,?)', rows)
connection.commit()
33 голосов
/ 19 января 2010
conn = sqlite3.connect('/path/to/your/sqlite_file.db')
c = conn.cursor()
for item in my_list:
  c.execute('insert into tablename values (?,?,?)', item)
12 голосов
/ 17 апреля 2016

Не прямой ответ, но вот функция для вставки строки с парами столбец-значение в таблицу sqlite:

def sqlite_insert(conn, table, row):
    cols = ', '.join('"{}"'.format(col) for col in row.keys())
    vals = ', '.join(':{}'.format(col) for col in row.keys())
    sql = 'INSERT INTO "{0}" ({1}) VALUES ({2})'.format(table, cols, vals)
    conn.cursor().execute(sql, row)
    conn.commit()

Пример использования:

sqlite_insert(conn, 'stocks', {
        'created_at': '2016-04-17',
        'type': 'BUY',
        'amount': 500,
        'price': 45.00})

Примечание,имя таблицы и имена столбцов должны быть предварительно проверены.

8 голосов
/ 19 января 2010

Адаптировано с http://docs.python.org/library/sqlite3.html:

# Larger example
for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
          ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
          ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
         ]:
    c.execute('insert into stocks values (?,?,?,?,?)', t)
0 голосов
/ 22 июня 2019
#The Best way is to use `fStrings` (very easy and powerful in python3)   
#Format: f'your-string'   
#For Example:

mylist=['laks',444,'M']

cursor.execute(f'INSERT INTO mytable VALUES ("{mylist[0]}","{mylist[1]}","{mylist[2]}")')

#THATS ALL!! EASY!!
#You can use it with for loop!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...