连接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中threading超线程用法实例分析
May 16 Python
python导入时小括号大作用
Jan 10 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
Python面向对象进阶学习
May 21 Python
PYTHON绘制雷达图代码实例
Oct 15 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
pytorch常见的Tensor类型详解
Jan 15 Python
python数据爬下来保存的位置
Feb 17 Python
python 实现单例模式的5种方法
Sep 23 Python
scrapy-splash简单使用详解
Feb 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
深入解析PHP的引用计数机制
2013/06/14 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python之yield表达式学习
2014/09/02 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
使用Python实现画一个中国地图
2019/11/23 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
司机岗位职责
2013/11/15 职场文书
给客户的道歉信
2014/01/13 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
师德师风自查总结
2014/10/14 职场文书
陪护人员误工证明
2015/06/24 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
活动新闻稿范文
2015/07/17 职场文书