连接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生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
python操作redis方法总结
Jun 06 Python
python顺序执行多个py文件的方法
Jun 29 Python
使用python切片实现二维数组复制示例
Nov 26 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
pip安装tensorflow的坑的解决
Apr 19 Python
python 实现PIL模块在图片画线写字
May 16 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
基于Python实现nc批量转tif格式
Aug 14 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
实用函数10
2007/11/08 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
JS跨域代码片段
2012/08/30 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
vue render函数动态加载img的src路径操作
2020/10/26 Javascript
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
django-初始配置(纯手写)详解
2019/07/30 Python
Python安装whl文件过程图解
2020/02/18 Python
python程序输出无内容的解决方式
2020/04/09 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
文明城市创建标语
2014/06/16 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
博士论文答辩开场白
2015/06/01 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
整脏治乱工作简报
2015/07/21 职场文书
浅谈MySQL user权限表
2021/06/18 MySQL
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏