Python操作Mysql数据库学习笔记

linux环境下 确保MySQL-python已经安装。

一:简单的MYSQL连接实例:

1.导入模块:
import MySQLdb

2:连接数据库:
conn = MySQLdb.connect(host='localhost',port=3306,user='root',passwd='admin',unix_socket='/usr/local/mysql-5.1.68/tmp/mysql.sock')
cur = conn.cursor( ) 
conn.select_db('python')
cur.execute("insert into wp_usermeta(user_id,meta_key,meta_value) value(2,'cname','testuser')")

3:便捷数据插入方法:

conn = MySQLdb.connect(host='localhost',port=3306,user='root',passwd='admin',unix_socket='/usr/local/mysql-5.1.68/tmp/mysql.sock')
cur = conn.cursor( )
conn.select_db('python')
sqli = "insert into wp_usermeta(user_id,meta_key,meta_value) value(%s,%s,%s)"
cur.execute(sqli,(2,'a','auser'))

4:批量插入多条数据:
conn = MySQLdb.connect(host='localhost',port=3306,user='root',passwd='admin',unix_socket='/usr/local/mysql-5.1.68/tmp/mysql.sock')
cur = conn.cursor( )
conn.select_db('python')
sqli = "insert into wp_usermeta(user_id,meta_key,meta_value) values(%s,%s,%s)" #注意这里是values
cur.executemany(sqli,[(1,'aa','aauser'),(3,'b','buser')])                                  #通过executemany进行列表数据批量导入

 

5:脚本创建数据库演示:

[root@sa ~]# cat create_db.py 
#!/usr/bin/env python
#create database for mysql
import MySQLdb

Socket="/usr/local/mysql-5.1.68/tmp/mysql.sock"
conn = MySQLdb.connect(host='localhost',port=3306,user='root',passwd='admin',unix_socket=Socket)
cur = conn.cursor( )
cur.execute('''create database python''')
cur.close();

6:批量插入数据库操作演示:

 

 1 [root@sa ~]# cat insert_db.py 
 2 #!/usr/bin/env python
 3 #create database for mysql
 4 import MySQLdb
 5 
 6 Socket="/usr/local/mysql-5.1.68/tmp/mysql.sock"
 7 conn = MySQLdb.connect(host='localhost',port=3306,user='root',passwd='admin',unix_socket=Socket)
 8 cur = conn.cursor( )
 9 cur.execute("""create database if not exists python""")
10 conn.select_db('python');
11 cur.execute("""create table test(id int,info varchar(100))""")
12 #value = [1,"test"];
13 #cur.execute("insert into test values(%s,%s)",value)
14 
15 values=[]
16 for i in range(1000):
17     values.append((i,'Hello' + str(i))) 
18 cur.executemany("""insert into test values(%s,%s)""",values); #注意后面的values    
19 cur.close();

7:数据查询:

 1 [root@sa ~]# cat select_db.py 
 2 #!/usr/bin/env python
 3 #coding:utf-8
 4 #create database for mysql
 5 import MySQLdb
 6 
 7 Socket="/usr/local/mysql-5.1.68/tmp/mysql.sock"
 8 conn = MySQLdb.connect(host='localhost',port=3306,user='root',passwd='rgsh-xmrh#3Q',unix_socket=Socket,db='python')
 9 cur = conn.cursor( )
10 count = cur.execute("""select * from test""")
11 
12 print "="*20
13 print "总共有 %s 条记录:" % count
14 print "="*20
15 
16 print "只获取一天记录:"
17 print "="*20
18 result = cur.fetchone();
19 #print result
20 print 'ID: %s | info: %s' % result
21 print "="*20
22 
23 print "获取15天的记录:"
24 result=cur.fetchmany(15)
25 for r in result:
26     print r
27 
28 print "获取全部信息:"
29 print "="*20
30 cur.scroll(0,mode='absolute') #重置游标位置0,为偏移量 mode=absolute|relative,默认为relative,
31 result=cur.fetchall()
32 for r in result:
33     print r
34 cur.close();

以上脚本执行结果如下:

[root@sa ~]# python select_db.py|more
====================
总共有 1000 条记录:
====================
只获取一天记录:
====================
ID: 0 | info: Hello0
====================
获取15天的记录:
(1L, 'Hello1')
(2L, 'Hello2')
(3L, 'Hello3')
(4L, 'Hello4')
(5L, 'Hello5')
(6L, 'Hello6')
(7L, 'Hello7')
(8L, 'Hello8')
(9L, 'Hello9')
(10L, 'Hello10')
(11L, 'Hello11')
(12L, 'Hello12')
(13L, 'Hello13')
(14L, 'Hello14')
(15L, 'Hello15')
获取全部信息:
====================
(0L, 'Hello0')
(1L, 'Hello1')
(2L, 'Hello2')
--More--

--------------------------------------------------------------------------------------------------------------

其它相关存档记录学习:(文档部分来源于互联网)

connect()参数列表如下:
host:      MySQL服务器名
user:      数据库使用者
passwd: 用户登录密码
db:        操作的数据库名
charset:  使用的字符集(一般是gb2312)
cur=conn.cursor( )   其实就是用来获得python执行Mysql命令的方法,也就是我们所说的操作游标
conv:                      将文字映射到Python类型的字典,默认为MySQLdb.converters.conversions
cursorclass,cursor()  使用的种类,默认值为MySQLdb.cursors.Cursor
compress:               启用协议压缩功能
named_pipe:            在windows中,与一个命名管道相连接
init_command:          一旦连接建立,就为数据库服务器指定一条语句来运行
read_default_file:      使用指定的MySQL配置文件
read_default_group:  读取的默认组
unix_socket:             在unix中,连接使用的套接字,默认使用TCP
port:                        指定数据库服务器的连接端口,默认是3306

db.close()                        方法可关闭数据库连接,并释放相关资源
db.cursor([cursorClass])    方法返回一个指针对象,用于访问和操作数据库中的数据
db.begin()                         方法用于开始一个事务,如果数据库的AUTOCOMMIT已经开启就关闭它,直到事务调用

commit()和rollback()结束
连接对象conn.commit()和db.rollback() 方法分别表示事务提交和回退
指针对象的cursor.close() 方法关闭指针并释放相关资源
指针对象的cursor.execute(query[,parameters]) 方法执行数据库查询
指针对象的cursor.fetchall() 可取出指针结果集中的所有行,返回的结果集一个元组(tuples)
指针对象的cursor.fetchmany([size=cursor.arraysize]) 从查询结果集中取出多行,我们可利用可选的参数指定取出的行数
指针对象的cursor.fetchone() 从查询结果集中返回下一行
指针对象的cursor.arraysize 属性指定由cursor.fetchmany()方法返回行的数目,影响fetchall()的性能,默认值为1
指针对象的cursor.rowcount 属性指出上次查询或更新所发生行数,-1表示还没开始查询或没有查询到数据

commit() 提交
rollback() 回滚

cursor用来执行命令的方法:
callproc(self,procname,args): 用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self,query,args): 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self,query,args): 执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self): 移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self): 接收全部的返回结果行.
fetchmany(self, size=None): 接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self): 返回一条结果行.
scroll(self, value, mode='relative'): 移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.

posted @ 2013-06-29 01:15  study-notes  阅读(248)  评论(0)    收藏  举报