使用Python(sqlite3模块)将UTF-8字符串保存到SQLite表中

1 投票
1 回答
4380 浏览
提问于 2025-04-18 02:10

我正在使用 Python 2.7.6 和 sqlite3。这里是我用来创建一个叫做 goods 的表的代码部分:

c.execute("""create table goods(
                            Art varchar(12) primary key,
                            Name_G varchar(30),
                            Meas varchar(3),
                            Price_G double unsigned,

                            check (Meas in ('кг.','л.','шт.')))""")

别怪我用这种方法,这是练习的要求。字段 Meas 只能包含三个字符串中的一个,它们在约束中列出,并且是俄语的。这个查询执行得很成功,但如果我查看数据库中的数据,我发现它存储的是以下 SQL:

CREATE TABLE goods(
                            Art varchar(12) primary key,
                            Name_G varchar(30),
                            Meas varchar(3),
                            Price_G double unsigned,

                            check (Meas in ('кг.','л.','шт.')))

如你所见,这些数据并不是俄语的。有没有什么方法可以在数据库中存储正确的数据?我试过 encode() 方法和 u'',但都没用。

1 个回答

2

以下的步骤对我来说是有效的:

alex@rhyme ~/tmp $ echo $LANG
ru_RU.UTF-8
alex@rhyme ~/tmp $ python    
Python 2.7.6 (default, Feb  5 2014, 11:50:47) 
[GCC 4.7.2 20121109 (ALT Linux 4.7.2-alt8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> db = sqlite3.connect('sample1.db')
>>> c = db.cursor()
>>> c1 = c.execute('PRAGMA encoding="UTF-8";')
>>> c1 = c.execute('CREATE TABLE sample (id INTEGER PRIMARY KEY AUTOINCREMENT, t VARCHAR(3) NOT NULL DEFAULT  "руб");')
>>> c1 = c.execute('INSERT INTO sample DEFAULT VALUES;')
>>> db.commit()

撰写回答