вставка данных переменной python в таблицу sqlite без сохранения

Я запрашиваю json на веб-сайте для данных, а затем сохраняю эти данные в переменную, чтобы я мог поместить их в таблицу sqlite. Я 2 из 3 за то, что я пытаюсь сделать, но сторона sqlite просто загадочна. Я могу запросить данные, оттуда я могу убедиться, что у переменной есть данные, когда я проверяю ее с помощью печати, но все мои вещи sqlite терпят неудачу. Это даже не создание таблицы, не говоря уже об обновлении таблицы (но по какой-то причине она печатает все результаты в буфер). Есть идеи, что я здесь делаю неправильно? Отказ от ответственности: немного питона-нуба. Я успешно создал тестовые таблицы, просто скопировав материал из документа python sqlite.

# this is requesting the data and seems to work
for ticket in zenpy.search("bananas"):
id = ticket.id
subj = ticket.subject
created = ticket.created_at
for comment in zenpy.tickets.comments(ticket.id):
    body = comment.body

# connecting to sqlite db that exists. things seem to go awry here
conn = sqlite3.connect('example.db')
c = conn.cursor()

# Creating the table table (for some reason table is not being created at all)
c.execute('''CREATE TABLE tickets_test
         (ticket id, ticket subject, creation date, body text)''')

# Inserting the variables into the sqlite table 
c.execute("INSERT INTO ticketstest VALUES (id, subj, created, body)")

# committing changes the changes and closing
c.commit()
c.close()

Я на 64-битной Windows и использую для этого pycharm.


person TheFoolinRed    schedule 21.09.2016    source источник


Ответы (1)


Ваша таблица, скорее всего, не создана, потому что вы еще не зафиксировали ее, и ваш sql дает сбой до того, как он зафиксируется. Это должно работать, когда вы исправите свой второй оператор sql.

Вы не вставляете созданные вами переменные в таблицу. Вам нужно использовать параметры. Существует два способа параметризации оператора sql. Я покажу именованные заполнители один:

c.execute("INSERT INTO ticketstest VALUES (:id, :subj, :created, :body)", 
    {'id':id, 'subj':subj, 'created':created, 'body':body}
)
person Gerrat    schedule 21.09.2016