连接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查询IP地址归属完整代码
Jun 21 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
pandas读取csv文件,分隔符参数sep的实例
Dec 12 Python
详解python中的hashlib模块的使用
Apr 22 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Python标准库itertools的使用方法
Jan 17 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
python热力图实现简单方法
Jan 29 Python
Python编程super应用场景及示例解析
Oct 05 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
smarty section简介与用法分析
2008/10/03 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
js仿3366小游戏选字游戏
2016/04/14 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
Python中查看文件名和文件路径
2017/03/31 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
pygame实现五子棋游戏
2019/10/29 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
四风问题自查报告剖析材料
2014/02/08 职场文书
个人简历中自我评价
2014/02/11 职场文书
班级学习计划书
2014/04/27 职场文书
企业安全标语
2014/06/07 职场文书
老人院义工活动感想
2015/08/07 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书