Python连接MySQL数据库通信实例以及中文乱码的解决办法

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

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值