sqlite3.OperationalError: near "-": синтаксическая ошибка - PullRequest
0 голосов
/ 11 апреля 2020

Не могу найти, где эта опечатка или что-то - каждый раз при получении этой ошибки line 33, in <module> c_a.execute('ATTACH DATABASE temp.db AS check') sqlite3.OperationalError: near "check": syntax error

Я пытаюсь присоединить базу данных temp.db к prime.db из-за одного запроса. Это помогло мне найти дубликаты записей (проверка login (один из столбцов в обеих базах данных))

import sqlite3

db_a = sqlite3.connect('prime.db')
c_a = db_a.cursor()

db_b = sqlite3.connect('temp.db')
c_b = db_b.cursor()

c_a.execute('ATTACH DATABASE temp.db AS check')
c_a.execute('SELECT * FROM check.user_info WHERE user_info.login = user.login')
db_a.commit()
c_a.fetchall()

Также пробовал другую версию:

attachDatabaseSQL = "ATTACH DATABASE temp.db AS check"
dbSpec = ("temp.db",)
c_a.execute(attachDatabaseSQL, dbSpec)
c_a.execute('SELECT * FROM check.user_info WHERE user_info.login = user.login')
db_a.commit()
c_a.fetchall()

Обнаружена ошибка : line 41, in <module> c_a.execute(attachDatabaseSQL, dbSpec) sqlite3.OperationalError: near "check": syntax error

Использование Python 3.8.1 и SQLite3.

ОБНОВЛЕНИЕ: изменено на:

c_a.execute('ATTACH DATABASE temp.db AS dbcheck')
c_a.execute('SELECT * FROM check.user_info WHERE user_info.login = user.login')
db_a.commit()
c_a.fetchall()

И ОШИБКА СЕЙЧАС ЕСТЬ:

c_a.execute('ATTACH DATABASE temp.db AS dbcheck')
sqlite3.OperationalError: no such column: temp.db

1 Ответ

0 голосов
/ 11 апреля 2020

ATTACH DATABASE temp.db AS check;

check - это зарезервированное слово в SQLite , как и в большинстве (если не во всех) других базах данных. В синтаксисе вступает в игру определение проверочных ограничений при создании таблиц .

Рассмотрите возможность использования другого имени, которое не конфликтует с ключевым словом языка. Например:

ATTACH DATABASE temp.db AS dbcheck;
...