sqliteでテーブル名に予約語を使ってしまった時

2020年11月12日木曜日

sqlite

t f B! P L

どう考えても間違っていないのにsqliteのクエリがsyntax errorになる場合、テーブル名にうっかり予約語を使っていることがあります。例えば、groupは予約語なので、次のクエリを実行すると、Error: near "group": syntax errorと表示されます。

$ sqlite3 database.sqlite
sqlite> select * from group;
Error: near "group": syntax error
sqlite>
予約語は、バッククオート`で囲むとエラーが出なくなります。

sqlite> select * from `group`;
4|3|1|0.91|2020-11-12 00:12:43|2020-11-12 00:18:46
5|3|2|0.997|2020-11-12 00:13:16|2020-11-12 00:15:05
sqlite>
pythonでsqliteを使用する場合、バッククオートはクエリの文字列中でエスケープ処理が必要ないので便利です。 

import sqlite3

connection = sqlite3.connect(dbpath)
connection.row_factory = sqlite3.Row
connection.text_factory = bytes
cursor = connection.cursor()
id = 4
cursor.execute('select * from `group` where id=?',(id,))
connection.close()

このブログを検索

QooQ