MySQLdb模块来完成。它符合Python社区设计的 Python Database API SpecificationV2.0标准,所以与其他的数据库操作的API,如SQLite等基本类似。



1.连接的建立与释放 

 

  建立连接时可用connect函数,它返回一个Connection类型对象 

 
 
 
 
connect( 
 'localhost', 
 'root', 
 '123456', 
 'test') 

 
 
 
 

  connect方法常用的参数有 

 
 
 
 
host:数据库主机名.默认是用本地主机.  
 
 
user:数据库登陆名.默认是当前用户.  
 
 
passwd:数据库登陆的秘密.默认为空.  
 
 
db:要使用的数据库名.没有默认值.  
 
 
port:MySQL服务使用的TCP端口.默认是3306. 

 
charset:数据库编码。 

 
 
 
 
如果在数据编码设置正确时,向数据库插入数据出现乱码时,可以设置连接的字符集参数charset。
 
 
 
 

  释放连接时可以应用Connection类型对象的close方法。 

 
close() 

 
 
 
 

  2.Cursor对象 

 

  执行SQL语句前要获得一个指定连接的Cursor对象,由Cursor对象执行SQL查询并获取结果。 

 
 
 
 

  获得Cursor对象的方法 

 
cursor() 

 
 
 
 
 
 在默认情况下cursor方法返回的是BaseCursor类型对象,BaseCursor类型对象在执行查询后每条记录的结果以列表(list)表示。如果要返回字典(dict)表示的记录,就要设置cursorclass参数为MySQLdb.cursors.DictCursor类。 

 
cursor(cursorclass=MySQLdb.cursors.DictCursor) 

 

  这个参数也可在调用connect方法建立连接时设置 

 
conn 
  = 
  MySQLdb. 
 connect 
 ( 
 host 
  = 
 'localhost' 
 , 
  user 
  = 
  'root' 
 , 
  passwd 
  = 
  '123456' 
 , 
  db 
  = 
  'test' 
  cursorclass 
  = 
  MySQLdb. 
 cursors 
 . 
 DictCursor 
 )
 
 
 
 

  执行结束后可以关闭cursor对象 

 
close() 

 
 
 
 

  3.查询,插入,更新、删除操作。 

 
 
 
 

  Cursor类型提供了execute方法用于执行SQL操作 

 
execute 
 ( 
 query 
 [,parameters])
 

  query是一个SQL字符串,parameters是一个序列或映射,返回值是所影响的记录数 

 
 
 
 

  查询 

 
execute( 
 "select * from t1 where name = %s and age = %s", ( 
 'June', 27)) 

 
execute( 
 "select * from t1 where name = %(name)s and age = %(age)s", { 
 'name': 
 'June', 
 'age':27}) 

 

  这里和字符串的格式化操作类似,但不管参数是什么类型,都要用'%s' 

 
 
 
 

  获取结果 

 

  获取结果集有三种方法,fetchone、fetchall和fetchmany,返回结果是一个tuple对象,tuple中的每一个元素对应查询结果中的一条记录。 

 
fetchone 
 ()返回结果集中的下一条记录 

 
fetchall 
 ()返回结果集中的剩余记录 

 
fetchmany 
 ([size])返回结果集中size条记录 

 
 
 
 

  插入、更新、删除 

 
execute( 
 "insert t1(name, age) values(%s, %s)", ( 
 'Jack', 32)) 

 

  更新和删除的操作与更新、删除类似 

 
 
 
 

  除了execute,Cursor类还提供了executemany()方法 

 
executemany 
 ( 
 query 
 [, parametersequence])
 

  querey是一个查询字符串,parametersequence是一个参数序列。这一序列的每一项都是一个序列或映射对象。但executemany只适合插入、更新或删除操作,而不适用于查询操作。 

 
 
 
 
execute( 
 "insert t1(name, age) values(%s, %s)", (( 
 'Jack', 32), ( 
 'Junior', 24))) 

 
 
 
 

  mysql现在一般会默认InnoDB作为默认引擎,InnoDB引擎执行插入、更新、删除操作后要进行提交,才会更新数据库。 

 
commit() 

 
 
 
 

  4.其他操作 

 

  Connection类: 

 
rollback 
 ()
 
 
 
 

  Cursor类: 

 
callproc 
 ( 
 procname 
 , 
 args 
 ):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数。 

 
nextset 
 ():移动到下一个结果集 

 

  执行查询操作或存储过程时可能返回多个结果集,例如: 

 
execute( 
 'select * from t1; select * from t2'