
1.背景:
python提供了很多数据库接口, 常用的数据库有 MS SQL Server /mysql /oracle 等。
打开链接 https://wiki.python.org/moin/DatabaseInterfaces
是python 关于数据库接口的一个总结 , 可以看到python支持的访问的数据库系统。
2.模块:
python 主要是通过模块和数据库连接的。
2.1 安装模块:
如果使用anconda,本身就会集合很多模块,不需要手动安装。如果用pycharm就要手动安装模块。
安装模块流程:
下载模块扩展包放到路径下——>cmd找到相应路径——>pip install +扩展包名字
下面列举一些常用连接数据库的模块:pymssql / sqlite3/ PyMySQL/pyodbc/odbc/adodbapi
不同模块连接的数据库不同, 支持的版本系统有的也不一样。但是大体用法都是相近的, 因为有DB-API
相关推荐:《Python教程》
3.Python DB-API
3.1背景:
在没有DB-API 之前, 不同数据库有不同的数据库接口程序, 这就导致python 访问 database 的接口程序非常混乱。如果我们学习了python 访问 mysql 的接口程序, 然后要切换到另一个数据库上, 我们还要在学习另外一个数据库的接口程序。python DB-API就是为了解决接口程序混乱而生成的。有了DB-API, 在不同数据库上移植代码就变得简单的多了。
3.2Python DB-API:
Python 定义了一套 *** 作数据库的 DB-API 接口,它是一个规范,定义了一系列必须的对象和数据库存取方式,以便为不同的底层数据库系统提供一致的访问接口
这个链接就是python 官方给定的 DB-API 的说明 https://www.python.org/dev/peps/pep-0249/
3.3 Python DB--API的内容:
连接对象:
?Connect()创建连接:host/server /user/password/db connect方法生成一个connect对象, 我们通过这个对象来访问数据库。符合标准的模块都会实现connect方法。
?close():关闭连接
?commit():提交当前事务。做出某些更改后确保已经进行了提交,这样才可以将这些修改真正地保存到database中
?rollback() 回滚上一次调用 commit()以来对数据库所做的更改
?cursor():创建游标。系统为用户开通的一个数据缓冲区,用于存放SQL语句执行结果。cursor游标是有状态的,它可以记录当前已经取到结果的第几个记录了,因此,一般你只可以遍历结果集一次。在上面的情况下,如果执行fetchone()会返回为空。这一点在测试时需要注意
游标对象:
?Execute()执行一个数据库查询或命令。 execute 执行sql 语句之后运行的结果不会直接output 出来 , 而是放到了一个缓存区, 要用 fetch语句+print 可以查询sql运行的结果
?fetchone ()得到结果集的下一行
?fetchmany(size)得到结果集的下几行
?fetchall()返回结果集中剩下的所有行
?rowcount 返回影响的行数
?Close()关闭游标对象
3.4Python DB--API的工作原理及流程:
如图所示如果把python 和数据库比作两个不同的地点, connection 就是路, 能连接python和database。cursor就像在路上行驶的小货车, 可以用于执行sql 语句, 以及存储sql 运行的结果。
流程:
4.MS SQL Server 示例:
4.1 导入模块、创建连接:
4.2 创建游标: 游标创建之后就可以对数据库进行查询更改了!
4.3对数据进行 *** 作(创建表、插入行、更新数据、增加列、删除行、列、表):
4.4 查询 获取行:
5.其他:
使用游标的时候要注意, 每次连接只能有一个游标查询处于活跃状态。 code演示:
execute()循环和 executemany() 插入100000 条数据测速:
通过以下的内容你就可以轻松的运用Python数据库连接池的相关步骤,希望下面的文章会对你有所收获。请求连接:
1.
db=pool.connection()2.
你可以使用这些连接有如原始的DB-API
2一样。而实际使用的是``SteadyDB``版本的强硬连接。请注意连接可以与其他线程共享,只要你设置
maxshared
参数为非零,并且DB-API
2模块也允许。如果你想要使用专用连接则使用:
1.
db=pool.connection(0)2.
如果你不再需要这个连接了,则可以返回给连接池使用
db.close()。你也可以使用相同的方法获取另一个连接。警告:在一个多线程环境,不要使用下面的方法:
1.
pool.connection().cursor().execute(...)2.
3.
db=pool.connection()4.
5.
cur=db.cursor()6.
7.
cur.execute(...)8.
9.
res=cur.fetchone()10.
11.
cur.close()
#
or
del
cur12.
13.
db.close()
#
or
del
db14.
示例
[方便你将来直接使用]
使用PersistentDB
模块
1.
import
threading,time,datetime2.
3.
import
MySQLdb4.
5.
import
DBUtils.PersistentDB6.
7.
persist=DBUtils.PersistentDB.PersistentDB(MySQLdb,100,host='localhost',user='root',passwd='321',db='test',charset='utf8')8.
9.
conn=persist.connection()10.
11.
cursor=conn.cursor()12.
13.
cursor.execute("insert
into
me
values(1,'22222')")14.
15.
conn.commit()16.
17.
conn.close()18.
通过以上的内容你就可以得到数据库连接了!
作者:不详
来源:网络
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)