连接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类的多重继承问题深入分析
Nov 09 Python
Python 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
举例讲解Python中is和id的用法
Apr 03 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
python K近邻算法的kd树实现
Sep 06 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
Django 响应数据response的返回源码详解
Aug 06 Python
python调用matplotlib模块绘制柱状图
Oct 18 Python
Django 解决model 反向引用中的related_name问题
May 19 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 Python
Pandas 数据编码的十种方法
Apr 20 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
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
Google韩国首页图标动画效果
2007/08/26 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
JavaScript循环_动力节点Java学院整理
2017/06/28 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
详解vue路由
2020/08/05 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
python生成随机验证码(中文验证码)示例
2014/04/03 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
python argparse传入布尔参数false不生效的解决
2020/04/20 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
物流管理专业大学生自荐信
2013/10/04 职场文书
人事部岗位职责范本
2014/03/05 职场文书
公司请假条格式
2014/04/11 职场文书
驾驶员培训方案
2014/05/01 职场文书
新闻人物通讯稿
2014/10/09 职场文书
个人先进事迹材料
2014/12/29 职场文书
2016年教师节慰问信
2015/12/01 职场文书
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL