安装
- MySQL, 到官网根据自己系统下载并安装[这种方式不推荐,安装配置比较麻烦]
这里介绍
免安装
的方式:
1.官网下载MySQL,根据系统选择64bit或32bit
2.设置环境变量:
添加MYSQL_HOME=D:\mysql-5.6.22-winx64
path
后添加%MYSQL_HOME%\bin
3.将D:\mysql-5.6.22-winx64\my-default.ini
拷贝一份并修改为my.ini
设置如下几项:basedir = D:/mysql-5.6.22-winx64 datadir = D:/mysql-5.6.22-winx64/data port = 3306
4.安装MySQL服务:在cmd(管理员权限)下运行mysqld -install
启动服务:net start mysql
停止服务:net stop mysql
5.配置用户密码:默认密码为空
设置密码:mysqladmin -uroot -p password <新密码>
将新密码替换为你自己的密码,按Enter
,提示输入原密码,直接再按下Enter
即可
6.登陆:运行mysql -u root -p
回车输入密码即可,接下你就可以进行数据库的各项操作了
- MySQLdb, 提供python连接MySQL的API,对于不同系统:
windows
:在这里下载exe安装(win8.1下无法安装时选择兼容模式)
Linux
:利用下面的命令安装:sudo apt-get install python-mysqldb
Mac
:参看 install MySQLdb using Macport
基本语法
这里介绍3个主要用到的数据类型
数据类型
- 整型
取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。
int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度。 - 浮点型
设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。 - 字符串
char
和varchar
:
- char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
- char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
- char类型的字符串检索速度要比varchar类型的快。
varchar
和text
:
- varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
- text类型不能有默认值。
- varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
SQL操作
对于常见SQL操作和语句,网上有很多资料,这里不再赘述,推荐下面两个:
这里也推荐一个SQL的语法规范:
Python下使用SQL
连接SQL
1 | import MySQLdb |
SQL操作
创建cursor对象
为了进行数据库相关的操作,在Python DB-API 2.0定义了cursor
对象,在进行任意一项操作之前必须创建cursor对象,语法如下:
1 | cur = db.cursor() |
执行SQL操作
- 创建表
1 | cur.execute("CREATE TABLE song ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, title TEXT NOT NULL )") |
执行单次查询
1
2
3
4songs = ('Purple Haze', 'All Along the Watch Tower', 'Foxy Lady')
for song in songs:
cur.execute("INSERT INTO song (title) VALUES (%s)", song)
print "Auto Increment ID: %s" % cur.lastrowid多次查询
1
cur.execute("SELECT * FROM song WHERE id = %s or id = %s", (1,2))
注意两个元素在同一个元组中,按从左到右的顺序与python语句中的
%s
对应执行选择语句
1
2
3numrows = cur.execute("SELECT * FROM song")
print "Selected %s rows" % numrows
print "Selected %s rows" % cur.rowcount上下两个语句是等价的,不过Python DB-API 2.0推荐使用第二种方式
获取结果
- 获取单个结果
1
2cur.execute("SELECT * FROM song WHERE id = 1")
print "Id: %s -- Title: %s" % cur.fetchone() - 获取多个结果
1
2
3
4
5
6
7# Print results in comma delimited format
cur.execute("SELECT * FROM song")
rows = cur.fetchall()
for row in rows:
for col in row:
print "%s," % col
print "\n"两种方式无优劣之分,可以根据自己的任务需求选择合适的获取方式
异常处理
推荐在SQL语句操作时加入异常处理,提高程序稳定性。异常处理方式与Python中的类似。
1 | # Get data from database |
结束操作
- 关闭数据库连接
1
2# Close all cursors
cur.close() - 清理
cursor
对象1
2# Close all databases
db.close()
以上就是一些简单的python操作SQL操作,更多cursor
对象的方法、定义可以参见下面的在线文档:
其他更加复杂的SQL操作可以参看—->>>
参考链接