在把sina数据保存到数据库的过程中又碰到了些新问题。
文本如下:
# coding=utf-8
import MySQLdb
import codecs
#读取爬取到的文件,按照用户名判断是否在数据库中存在,并返回id
infofile = codecs.open("inforead.txt", 'r', 'utf-8')
infofilenew = codecs.open("infowrite.txt", 'a', 'utf-8')
username = infofile.readline()
conn = MySQLdb.connect (host = "localhost", user = "root", passwd = "123456", db = "school", use_unicode=True, charset="utf8")
cursor = conn.cursor ()
# cursor.execute('SET NAMES gbk')
while username!="":
username = username.split(' ')
givenname = username[0]
givenname = givenname.encode("utf8")
#判断该用户是否已存在
cursor.execute ("SELECT id from teacher where name='"+givenname+"'")
rows = cursor.fetchall()
if len(rows)>0:
#存在则返回该用户的id
id = rows[0][0]
elif len(rows)==0:
#不存在则插入到数据库
# print type(givenname)
# print givenname
# print type(givenname)
# print givenname
print givenname=='流'
cursor.execute("insert into teacher(name,age,xi) values('"+givenname+"',12,6)")
conn.commit()
cursor.execute ("SELECT id from teacher where name='"+givenname+"'")
row = cursor.fetchall()
id = row[0][0]
print id
infofilenew.write(str(id)+" "+username[1])
username = infofile.readline()
cursor.close ()
conn.close ()
现在来看,整个文件有多处提到编码问题:
首先在打开文件加载到内存过程中打开方式是utf8,也就是说文件处理是utf8.
其次,在mysql的connection处提到写入数据库的格式为utf8。问题就出在这,因为之前测试过程中试着在写入数据库之前将数据库的一些编码格式改为gbk,才写了这个set。。。但是,这就与utf8产生了冲突。导致我的givenname编码产生冲突,成了gbk,所以我还需要将givenname格式encode为utf8.。。
问题大概都明白了,对于字符编码理解又多了些。