连接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 动态获取当前运行的类名和函数名的方法
Apr 15 Python
python中self原理实例分析
Apr 30 Python
在Python的Django框架中创建语言文件
Jul 27 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
Python 统计字数的思路详解
May 08 Python
pandas带有重复索引操作方法
Jun 08 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 Python
django admin 添加自定义链接方式
Mar 11 Python
python3 循环读取excel文件并写入json操作
Jul 14 Python
利用Python将多张图片合成视频的实现
Nov 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 ADODB使用方法集锦
2008/03/25 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
2019/01/27 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
Python标准模块--ContextManager上下文管理器的具体用法
2017/11/27 Python
Python3 Random模块代码详解
2017/12/04 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
Python实现一个论文下载器的过程
2021/01/18 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
全球最大的游戏市场:G2A
2018/07/05 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
建房协议书
2014/04/11 职场文书
民事赔偿协议书
2014/11/02 职场文书
出差报告怎么写
2014/11/06 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书