1)游标
# 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制 # 游标总是与一条SQL 选择语句相关联因为游标由结果集 # (可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成 import MySQLdb def connect_mysql(): db_config = { "host":"localhost", "user":"root", "passwd":"root", "db":"python_db", "charset":"utf8" } cnx = MySQLdb.connect(**db_config) return cnx if __name__ == '__main__': cnx = connect_mysql() cus = cnx.cursor() # 创建游标对象 sql = '''select * from test;''' try: cus.execute(sql) result1 = cus.fetchone() #在结果中取一条数据 print('result1:') print(result1) result2 = cus.fetchmany(1) #在接下来的结果中取一条数据,数字可定义 print('result2:') print(result2) result3 = cus.fetchall() #在接下来的结果中取出所有数据 print('result3:') print(result3) cus.close() cnx.commit() except Exception as e: cnx.rollback() print('error:') raise e finally: cnx.close() # 常用方法: # cursor():创建游标对象 # close():关闭此游标对象 # fetchone():得到结果集的下一行 # fetchmany([size = cursor.arraysize]):得到结果集的下几行 # fetchall():得到结果集中剩下的所有行 # excute(sql[, args]):执行一个数据库查询或命令 # executemany (sql, args):执行多个数据库查询或命令
运行结果:
result1:
(100L,)
result2:
((2L,),)
result3:
((5L,), (8L,), (11L,))
(100L,)
result2:
((2L,),)
result3:
((5L,), (8L,), (11L,))
2)连接池
DBUtils提供两种外部接口:
* PersistentDB :提供线程专用的数据库连接,并自动管理连接。
* PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
import MySQLdb from DBUtils.PooledDB import PooledDB db_config = { "host": "localhost", "port": 3306, "user": "root", "passwd": "root", "db": "python_db", "charset": "utf8" } pool = PooledDB(MySQLdb, 5, **db_config) # 5为连接池里的最少连接数 conn = pool.connection() # 以后每次需要数据库连接就是用connection()函数获取连接就好了 cur = conn.cursor() SQL = "select * from tmp;" r = cur.execute(SQL) r = cur.fetchall() print(r) cur.close() conn.close()
PooledDB的参数:
1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
3. maxconnections,最大的连接数,
4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错,
5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接
连接池对性能的提升表现在:
1.在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
2.关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接
3)表结构设计
在操作设计数据库之前,我们先要设计数据库表结构,先要分析各个主体他们之间有什么属性,并确定表结构,在实际开发过程中,根据自己的业务需要和属性,设计不同的表结构