使用python(sqlite3模块)将utf-8字符串保存到sqlite表中

时间:2014-04-10 09:44:53

标签: python 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 个答案:

答案 0 :(得分:0)

以下说明适用于我:

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