设为首页 收藏本站
查看: 754|回复: 0

[经验分享] Python连接MySQL数据库通信实例以及中文乱码的解决办法

[复制链接]

尚未签到

发表于 2015-10-26 12:33:59 | 显示全部楼层 |阅读模式
Python连接MySQL数据库通信实例以及中文乱码的解决办法
(2011-11-14 08:40:16)转载标签: python
mysql
分类: 技术备忘我的开发环境:Windows 7 + Navicat for MySQL + Python 2.7
想要PythonMySQL进行通信,就需要根据自己开发时的操作系统下载相对应的PythonMySQL的接口模块,并编译安装。我下载的是MySQL-python-1.2.3.win32-py2.7.exe,下载后双击安装即可。准备工作都做好后,就可以使用python进行数据库访问了,下面给出一个简单的实例:
#!/usr/bin/env python

import sys

import MySQLdb


#Connect to database

try:

    conn = MySQLdb.connect(host = "localhost",

                           user= "user",

                           passwd= "passwd",

                           db= "pythontest")

except MySQLdb.Error, e:

    print "Error %d: %s" % (e.args[0], e.args[1])

    sys.exit(1)


#Get a cursor to execute sql command

cursor = conn.cursor()

cursor.execute("DROP TABLE IF EXISTS student")

cursor.execute("""

    CREATE TABLE student

    (

        name CHAR(20),

        number CHAR(20)

    )

    """)

cursor.execute("""

    INSERT INTO student(name, number)

    VALUES

        ('Smith', '2011001'),

        ('John', '2011002'),

        ('Mike', '2011003'),

        ('Joey', '2011004')

    """)


sqlcmd = "SELECT * from student"

cursor.execute(sqlcmd)


#Deal with the results

results = cursor.fetchall()

for row in results:

    print "%s, %s" % (row[0], row[1])

print "Number of rows returned: %d" % cursor.rowcount


#Close cursor and connection

cursor.close()

conn.close()



如果数据库中存储的数据包含中文,那么在python的控制台打印查询结果时可能会出现乱码,下面是解决方案:
1.       python脚本开始设置编码方案为utf-8,即在脚本文件开头加上一行:
#encoding=utf-8
2.       连接MySQL数据库时设置编码集为utf8
conn = MySQLdb.connect(host = "localhost",
                 user= "user",
                 passwd = "passwd",
                 db = "pythontest",
                 charset= "utf8")
3.  (可选,不一定需要)在脚本文件中设置Python的默认编码为utf-8
Import sys
reload(sys)
sys.setdefaultencoding("utf-8")
4.       (可选,不一定需要)修改数据库中的编码方案为utf-8。如果使用Navicat,直接从“数据库属性”中即可修改数据库编码方案;如果是Linux下的MySQL数据库,那么需要修改MySQL的配置文件,即设置 MySQL my.cnf 文件,在 [client]/[mysqld]部分都设置默认的字符集(通常在/etc/mysql/my.cnf)
[client]

default-character-set = utf8
[mysqld]

default-character-set = utf8


经过我的测试,一般来说完成前两步就可以正常输出中文了,以下是修改后的脚本:
#!/usr/bin/env python

#encoding=utf-8

import sys

import MySQLdb


#reload(sys)

#sys.setdefaultencoding("utf-8")


#Connect to database

try:

    conn = MySQLdb.connect(host = "localhost",

                           user= "user",

                           passwd= "passwd",

                           db= "pythontest",

                           charset= "utf8")

except MySQLdb.Error, e:

    print "Error %d: %s" % (e.args[0], e.args[1])

    sys.exit(1)


#Get a cursor to execute sql command

cursor = conn.cursor()

cursor.execute("DROP TABLE IF EXISTS student")

cursor.execute("""

    CREATE TABLE student

    (

        name CHAR(20),

        number CHAR(20)

    )

    """)

cursor.execute("""

    INSERT INTO student(name, number)

    VALUES

        ('张三','2011001'),

        ('李四','2011002'),

        ('王五','2011003'),

        ('薛六','2011004')

    """)


sqlcmd = "SELECT * from student"

cursor.execute(sqlcmd)


#Deal with the results

results = cursor.fetchall()

for row in results:

    print "%s, %s" % (row[0], row[1])

print "Number of rows returned: %d" % cursor.rowcount


#Close cursor and connection

cursor.close()

conn.close()


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130961-1-1.html 上篇帖子: python的学习(九)----多线程编程(2) 下篇帖子: Python print 不换行打印
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表