鍍金池/ 問答/Python  數(shù)據(jù)庫(kù)/ 將中文存入數(shù)據(jù)庫(kù)后如何使用中文條件查詢出結(jié)果?

將中文存入數(shù)據(jù)庫(kù)后如何使用中文條件查詢出結(jié)果?

1.將通訊錄的信息導(dǎo)入到了sqlite3中
2.使用select查詢出的結(jié)果為類似[(01,u'u30a4u0379u8159',u'。。。')]結(jié)果
3.現(xiàn)在想用python寫select * from tabname where username='張某';這樣的語句查詢,可是查詢不到,數(shù)據(jù)庫(kù)中存在此條目
4.請(qǐng)問需要將“張某”編碼后再查詢?編碼成什么呢?

--coding:gb2312--

import xlrd
import os
import sys
import sqlite3
def get_address():

stdi,stdo,stde=sys.stdin,sys.stdout,sys.stderr
reload(sys)
sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde
sys.setdefaultencoding('gb2312')
xlrd.Book.encoding = "gb2312"
if not os.path.exists('f:\address_list1.xlsx'):
    xlsx = xlrd.open_workbook(r'f:\address_list1.xlsx')
    #print xlsx.sheet_names()
    #print type(xlsx.sheet_names())
    sheet = xlsx.sheet_by_name('Sheet1')
    #print sheet.nrows,sheet.ncols
    row_name_data = sheet.row_values(0)
    alllist = []
    for num in range(sheet.nrows):
        row_data = sheet.row_values(num)
        alllist.append(row_data)
    #print '&&&&&&&&',alllist
    if not os.path.exists('f:\address_list1.xlsx'):
        conn = sqlite3.connect(r'f:\test.db')
        cur = conn.cursor()
        conn.execute('''
               CREATE TABLE user_address(
                    user_id      INTEGER    DEFAULT 0 PRIMARY KEY ,
                    user_name   VARCHAR(15) NOT NULL,
                    local_number  VARCHAR(15)    DEFAULT 0 ,
                    phone_number    INTEGER(15)
                    )
                    ''')
        query = 'INSERT INTO user_address VALUES (?,?,?,?)'
        count = 1
        for element in range(len(alllist)):
            conn.execute(query,(element+1,alllist[element][0],alllist[element][1],alllist[element][2]))
            count = count + 1
            conn.commit()
conn = sqlite3.connect(r'f:\test.db')
cur = conn.cursor()
cur.execute('SELECT * FROM user_address where user_name="張某"')
result = cur.fetchall()
print result

get_address()

輸出結(jié)果為[]

回答
編輯回答
涼心人

1,連接數(shù)據(jù)庫(kù)時(shí)使用charset='utf8'
2,sql語句使用unicode形式拼接,最后encode成utf-8;

2017年8月1日 20:36
編輯回答
菊外人

先確定你數(shù)據(jù)庫(kù)中 該列數(shù)據(jù)保存的編碼格式
mysql中是 show variables like 'character_set_database'
然后就可以與你程序上查詢的編碼格式做匹配

建議不要這樣寫 select * from tabname where username='張某'
應(yīng)該這樣寫 select * from tabname where username='{}'.format()
或者 """select * from tabname where username='%s'""" %

2017年7月25日 03:50