sqlite3.OperationalError: вблизи "'...'": синтаксическая ошибка - PullRequest
0 голосов
/ 18 января 2019

ФАЙЛ ВВОДА:

$ cat inputs.csv
'18-01-2019', 296.0
'18-01-2019', 296.0
'18-01-2019', 296.0

КОД:

import csv
import sqlite3
import pprint

conn = sqlite3.connect('metrics.db')
c = conn.cursor()

def read_file(filename):
    with open(filename, 'r') as f:
        yield from f

for row in read_file('inputs.csv'):

    data = row.split(',')
    values = '({}, {})'.format(data[0], data[1].strip())
    print('Values are: {}'.format(values))

    try:
        query = '\'INSERT INTO metric_db VALUES (?, ?)\', {}'.format(values)
        print('Query is: {}'.format(query))
        c.execute(query)
    except sqlite3.IntegrityError as e:
        pass

conn.commit()
conn.close()

ОШИБКА ВЫХОДА:

Values are: ('18-01-2019', 296.0)
Query is: 'INSERT INTO metric_db VALUES (?, ?)', ('18-01-2019', 296.0)
Traceback (most recent call last):
  File "write_to_db.py", line 21, in <module>
    c.execute(query)
sqlite3.OperationalError: near "'INSERT INTO metric_db VALUES (?, ?)'": syntax error

Я думал, что это было проще. Довольно много тем SO на эту ошибку. Но я все еще не там: (

1 Ответ

0 голосов
/ 18 января 2019

Измените оператор запроса:

query = 'INSERT INTO metric_db VALUES  {}'.format(values)

EDIT

Чтобы избежать SQL-инъекций и использовать правильный формат даты:

import csv
import sqlite3
import pprint
from datetime import datetime

conn = sqlite3.connect('metrics.db')
c = conn.cursor()

def read_file(filename):
    with open(filename, 'r') as f:
        yield from f

for row in read_file('inputs.csv'):

    data = row.split(',')
    values = '({}, {})'.format(data[0], data[1].strip())
    print('Values are: {}'.format(values))
    date_readed = datetime.strptime(data[0], '%d-%m-%Y').strftime('%Y-%m-%d')

    try:
        query = 'INSERT INTO metric_db VALUES (?, ?)'
        c.execute(query,(date_readed,data[1],))
    except sqlite3.IntegrityError as e:
        pass

conn.commit()
conn.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...