使用Python(sqlite3模块)将UTF-8字符串保存到SQLite表中
我正在使用 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()