2014-04-10 25 views
1

我正在使用python 2.7.6和sqlite3。 下面的代碼必須創建表名爲貨物部分:用python(sqlite3模塊)將utf-8字符串保存到sqlite表中

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 ('кг.','л.','шт.'))) 

正如你所看到的,這不是俄羅斯。有什麼方法可以在數據庫中存儲正確的數據嗎?編碼()方法,你'沒有爲我工作。

+0

它的西里爾語(俄語)字母UTF-8表示。 – user3159253

+0

您是否隨時使用Windows命令提示符? –

+0

好吧。問題與我的Sqlite查看器有關。它在正確的時候顯示錯誤的數據。悖論。 – felidae

回答

1

以下說明正常工作對我來說:

[email protected] ~/tmp $ echo $LANG 
ru_RU.UTF-8 
[email protected] ~/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()