gpt4 book ai didi

python - 通过 python 设置 SQLite 数据库的(默认)编码

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:00 25 4
gpt4 key购买 nike

我想通过 python 驱动程序创建一个 SQLite 数据库。由于应用程序将在不同的操作系统上运行,我想明确指定 SQLite 数据库中文本的(默认)编码。

显然我只能在使用此命令创建数据库之前执行此操作 (see SQLite docs) :

PRAGMA encoding = "UTF-8";

我的问题是创建/连接到数据库的 Python 方法没有指定(至少在我看来)在创建数据库之前设置 PRAGMA(例如编码)的方法 (Python docs)

因此,是否有任何方法可以在创建数据库之前/期间通过 python SQlite 驱动程序指定编码?

我目前看到的唯一解决方法(似乎有点老套)是通过 python 运行 Shell 命令,但由于机器上未安装 SQLite CLI,因此无法选择。

最佳答案

您可以创建数据库并在之后更改编码

>>> 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>

如果您至少不添加表格,编码将退回到默认值。希望这会有所帮助。

关于python - 通过 python 设置 SQLite 数据库的(默认)编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53060818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com