2016-07-02 5 views
1

Я знаю только, как вводить строки и цифры, но есть ли способ войти в список? В принципе, у меня есть словарь, и каждый ключ помещается в базу данных. Значение для каждой клавиши - это список, и я хочу это также в базе данных.Как вставить список в базу данных sqlite3

+1

Вы хотите ввести список как одну запись или стол? Если это таблица, то либо используйте повторяющиеся вставки, либо вставку блока. См. Https://www.sqlite.org/lang_insert.html - посмотрите на синтаксис части VALUES – cup

ответ

1

SQLite3 не имеет типа данных массива. (См. Datatypes in SQLite version 3)

Но вы можете сериализовать его, чтобы вставить его в таблицу sqlite3.

Например, вы можете преобразовать список в строку json и использовать строку для вставки в таблицу. (json.dumps)

cursor.execute('INSERT INTO a_table (..., a_list_field) values (..., ?)', 
       [..., json.dumps(a_list_object)]) 

При выборе его, преобразовать его обратно в список путем загрузки JSon строки. (json.loads)

0

С sqlite3 я смог выполнить этот скрипт, который удаляет базу данных и перезаписывает ее новыми данными, используя список с именем data. Это может или не может ответить на ваш конкретный вопрос:

from views import db 
from config import DATABASE_PATH 

import sqlite3 
from datetime import datetime 

with sqlite3.connect(DATABASE_PATH) as connection: 
    c = connection.cursor() 

    c.execute("""ALTER TABLE tasks RENAME TO old_tasks""") 

    db.create_all() 

    c.execute("""SELECT name, due_date, priority, 
       status FROM old_tasks ORDER BY task_id ASC""") 

    data = [(row[0], row[1], row[2], row[3], 
     datetime.now(), 1) for row in c.fetchall()] 

c.executemany("""INSERT INTO tasks (name, due_date, priority, status, 
        posted_date, user_id) VALUES (?, ?, ?, ?, ?, ?)""", data) 


    c.execute("DROP TABLE old_tasks") 

Когда выше скрипт выполняется, data принимает в подразделов списков и использует данные из них, чтобы создать новую базу данных.

Надеюсь, я помог!

Смежные вопросы