Установите (по умолчанию) кодировку базы данных SQLite через python - PullRequest
0 голосов
/ 30 октября 2018

Я хочу создать базу данных SQLite через драйвер python. Поскольку приложение будет работать в разных операционных системах, я хочу явно указать (по умолчанию) кодировку текста в базе данных SQLite.

Очевидно, я могу сделать это только до того, как база данных будет создана с помощью этой команды (см. Документацию по SQLite) :

PRAGMA encoding = "UTF-8";

Моя проблема заключается в том, что способ создания / подключения к базе данных в Python не определяет (по крайней мере, насколько я понимаю) способ установки PRAGMA (например, кодирование) перед созданием базы данных ( Документы Python )

Следовательно, есть ли способ указать кодировку через драйвер python SQlite до / во время создания базы данных?

Единственный обходной путь, который я сейчас вижу, который кажется немного странным, - это запуск команд Shell через python, но, поскольку CLI SQLite не установлен на машинах, это не вариант.

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете создать базу данных и впоследствии изменить кодировку

>>> import sqlite3
>>> conn = sqlite3.connect('example.db')
>>> c = conn.cursor()
>>> c.execute('pragma encoding')
<sqlite3.Cursor object at 0x7fa641241e30>
>>> rows = c.fetchall()
>>> for row in rows:
...     print(row)
... 
('UTF-8',)
>>> c.execute('pragma encoding=UTF16')
<sqlite3.Cursor object at 0x7fa641241b20>
>>> c.execute('pragma encoding')
<sqlite3.Cursor object at 0x7fa641241e30>
>>> rows = c.fetchall()
>>> for row in rows:
...     print(row)
... 
('UTF-16le',)

Обратите внимание, что необходимо отредактировать базу данных, чтобы сделать эти изменения постоянными, например:

>>> sql_create_projects_table = """ CREATE TABLE IF NOT EXISTS projects (
...                                         id integer PRIMARY KEY,
...                                         name text NOT NULL,
...                                         begin_date text,
...                                         end_date text
...                                     ); """
>>> c.execute(sql_create_projects_table)
<sqlite3.Cursor object at 0x7f441ce90e30>
>>> rows = c.fetchall()
>>> for row in rows:
...     print(row)
...
>>> sql = ''' INSERT INTO projects(name,begin_date,end_date)
...               VALUES(?,?,?) '''
>>> project = ('Cool App with SQLite & Python', '2015-01-01', '2015-01-30');
>>> c.execute(sql, project)
<sqlite3.Cursor object at 0x7f441ce90e30>

Если вы по крайней мере не добавите таблицу, кодировка вернется к значению по умолчанию. Надеюсь, это поможет.

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