sqlite3.OperationalError: рядом --: синтаксическая ошибка

Не могу найти, где эта опечатка или что-то в этом роде - каждый раз получаю эту ошибку 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

person pylsokol    schedule 11.04.2020    source источник


Ответы (1)


ATTACH DATABASE temp.db AS check;

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

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

ATTACH DATABASE temp.db AS dbcheck;
person GMB    schedule 11.04.2020
comment
Что ж, попробовал это, но на этот раз появляется другая ошибка... c_a.execute('ATTACH DATABASE crm.db AS dbcheck') c_a.execute('SELECT * FROM check.user_info WHERE user_info.login = user.login') db_a.commit() c_a.fetchall() print('Records have been deduplicated.') ошибка на этот раз: line 33, in <module> c_a.execute('ATTACH DATABASE temp.db AS dbcheck') sqlite3.OperationalError: no such column: temp.db - person pylsokol; 11.04.2020