连接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中使用partial改变方法默认参数实例
Apr 28 Python
在Python中操作字典之update()方法的使用
May 22 Python
python多线程方式执行多个bat代码
Jun 07 Python
sublime text 3配置使用python操作方法
Jun 11 Python
python多线程之事件Event的使用详解
Apr 27 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
python使用配置文件过程详解
Dec 28 Python
Python函数基本使用原理详解
Mar 19 Python
jupyter notebook 添加kernel permission denied的操作
Apr 21 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 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
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
JS简单实现元素复制示例附图
2013/11/19 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
jquery实现二级导航下拉菜单效果
2015/12/18 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
基于jQuery封装的分页组件
2017/06/26 jQuery
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
vue中使用vue-print.js实现多页打印
2020/03/05 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
python求pi的方法
2014/10/08 Python
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
用C++封装MySQL的API的教程
2015/05/06 Python
Python NumPy库安装使用笔记
2015/05/18 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
python实现键盘输入的实操方法
2019/07/16 Python
python logging设置level失败的解决方法
2020/02/19 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
python代码实现猜拳小游戏
2020/11/30 Python
python中pop()函数的语法与实例
2020/12/01 Python
adidas美国官网:adidas US
2016/09/21 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
教师个人自我评价范文
2014/04/13 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
法人代表资格证明书
2015/06/18 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android