连接Python程序与MySQL的教程


Posted in Python onApril 29, 2015

MySQL是Web世界中使用最广泛的数据库服务器。SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。

此外,MySQL内部有多种数据库引擎,最常用的引擎是支持数据库事务的InnoDB。
安装MySQL

可以直接从MySQL官方网站下载最新的Community Server 5.6.x版本。MySQL是跨平台的,选择对应的平台下载安装文件,安装即可。

安装时,MySQL会提示输入root用户的口令,请务必记清楚。如果怕记不住,就把口令设置为password。

在Windows上,安装时请选择UTF-8编码,以便正确地处理中文。

在Mac或Linux上,需要编辑MySQL的配置文件,把数据库默认的编码全部改为UTF-8。MySQL的配置文件默认存放在/etc/my.cnf或者/etc/mysql/my.cnf:

[client]

default-character-set = utf8
[mysqld]

default-storage-engine = INNODB

character-set-server = utf8

collation-server = utf8_general_ci

重启MySQL后,可以通过MySQL的客户端命令行检查编码:

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor...
...

mysql> show variables like '%char%';
+--------------------------+--------------------------------------------------------+
| Variable_name      | Value                         |
+--------------------------+--------------------------------------------------------+
| character_set_client   | utf8                          |
| character_set_connection | utf8                          |
| character_set_database  | utf8                          |
| character_set_filesystem | binary                         |
| character_set_results  | utf8                          |
| character_set_server   | utf8                          |
| character_set_system   | utf8                          |
| character_sets_dir    | /usr/local/mysql-5.1.65-osx10.6-x86_64/share/charsets/ |
+--------------------------+--------------------------------------------------------+
8 rows in set (0.00 sec)

看到utf8字样就表示编码设置正确。
安装MySQL驱动

由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器。

目前,有两个MySQL驱动:

  1.     mysql-connector-python:是MySQL官方的纯Python驱动;
  2.     MySQL-python:是封装了MySQL C驱动的Python驱动。

可以把两个都装上,使用的时候再决定用哪个:

$ easy_install mysql-connector-python
$ easy_install MySQL-python

我们以mysql-connector-python为例,演示如何连接到MySQL服务器的test数据库:

# 导入MySQL驱动:
>>> import mysql.connector
# 注意把password设为你的root口令:
>>> conn = mysql.connector.connect(user='root', password='password', database='test', use_unicode=True)
>>> cursor = conn.cursor()
# 创建user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
# 插入一行记录,注意MySQL的占位符是%s:
>>> cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])
>>> cursor.rowcount
1
# 提交事务:
>>> conn.commit()
>>> cursor.close()
# 运行查询:
>>> cursor = conn.cursor()
>>> cursor.execute('select * from user where id = %s', '1')
>>> values = cursor.fetchall()
>>> values
[(u'1', u'Michael')]
# 关闭Cursor和Connection:
>>> cursor.close()
True
>>> conn.close()

由于Python的DB-API定义都是通用的,所以,操作MySQL的数据库代码和SQLite类似。
小结

    MySQL的SQL占位符是%s;

    通常我们在连接MySQL时传入use_unicode=True,让MySQL的DB-API始终返回Unicode。

Python 相关文章推荐
Python命令行参数解析模块getopt使用实例
Apr 13 Python
python实现的jpg格式图片修复代码
Apr 21 Python
分享Python文本生成二维码实例
Jan 06 Python
python图片验证码生成代码
Jul 02 Python
python验证码识别实例代码
Feb 03 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
50行Python代码获取高考志愿信息的实现方法
Jul 23 Python
python动态视频下载器的实现方法
Sep 16 Python
Python 面向对象部分知识点小结
Mar 09 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 Python
python实现通过代理服务器访问远程url的方法
Apr 29 #Python
python实现带错误处理功能的远程文件读取方法
Apr 29 #Python
python使用socket远程连接错误处理方法
Apr 29 #Python
python使用socket连接远程服务器的方法
Apr 29 #Python
python使用socket向客户端发送数据的方法
Apr 29 #Python
python使用socket进行简单网络连接的方法
Apr 29 #Python
python基于socket实现网络广播的方法
Apr 29 #Python
You might like
Syphon 使用方法
2021/03/03 冲泡冲煮
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP中的session安全吗?
2016/01/22 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
实例浅析js的this
2016/12/11 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
javascript实现日历效果
2019/06/17 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
小区的门卫岗位职责
2014/10/01 职场文书
班主任2015新年寄语
2014/12/08 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
民事上诉状范文
2015/05/22 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
Vue和Flask通信的实现
2021/05/19 Vue.js