连接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中subprocess的简单使用示例
Jul 28 Python
Python实现命令行通讯录实例教程
Aug 18 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
Django 外键的使用方法详解
Jul 19 Python
WxPython实现无边框界面
Nov 18 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
Python random模块的使用示例
Oct 10 Python
Python字符串的15个基本操作(小结)
Feb 03 Python
Python Socket编程详解
Apr 25 Python
浅谈Python数学建模之数据导入
Jun 23 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笔试题
2009/08/04 PHP
php 获取客户端的真实ip
2009/11/30 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
2017/02/05 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
对Python信号处理模块signal详解
2019/01/09 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
CSS3 新增选择器的实例
2019/11/13 HTML / CSS
招商经理岗位职责
2013/11/16 职场文书
读书心得体会
2013/12/28 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
质量管理标语
2014/06/12 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Go归并排序算法的实现方法
2022/04/06 Golang