```
# 安装DBUtils包
# pip install DBUtils
from DBUtils.PooledDB import PooledDB
pool=PooledDB(pymysql,5,host='0.0.0.0',user='root',passwd='123456',db='gps_base_data20171001-20171031',port=3306,charset="utf8") #5为连接池里的最少连接数
def test(project_name):
try:
# 调用连接池
conn=pool.connection()
cur=conn.cursor()
sql="select * from student"
cur.execute(sql)
result=cur.fetchall()
params=[]
nowDate=dateUtil.datetime()
for row in result:
params.append((row[0], row[1], project_name, nowDate))
except IOError:
conn.rollback() # 出现异常 回滚事件
print("Error: Function happen Error: test()")
finally:
print("释放资源,test,"+project_name)
cur.close()
conn.close()
```
The dependencies of the modules in the universal DB-API 2 variant are as indicated in the following diagram:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SHyEhjy2-1600348955087)(https://cito.github.io/w4py-olde-docs/Webware/DBUtils/Docs/dbdep.gif)]
The dependencies of the modules in the classic PyGreSQL variant are similar:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pUaxT81b-1600348955088)(https://cito.github.io/w4py-olde-docs/Webware/DBUtils/Docs/pgdep.gif)]
DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。
DBUtils提供两种外部接口:
PersistentDB :提供线程专用的数据库连接,并自动管理连接。
PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
实测证明 PersistentDB 的速度是最高的,但是在某些特殊情况下,数据库的连接过程可能异常缓慢,而此时的PooledDB则可以提供相对来说平均连接时间比较短的管理方式。
另外,实际使用的数据库驱动也有所依赖,比如SQLite数据库只能使用PersistentDB作连接池。
功能
SteadyDB.py用于稳定数据库连接
PooledDB.py连接池
PersistentDB.py维持持续的数据库连接(持续性连接)
SimplePooledDB.py简单连接池
SimplePooledDB
DBUtils.SimplePooledDB 是一个非常简单的数据库连接池实现。他比完善的 PooledDB 模块缺少很多功能。 DBUtils.SimplePooledDB 本质上类似于 MiscUtils.DBPool 这个Webware的组成部分。你可以把它看作一种演示程序。
SteadyDB
DBUtils.SteadyDB 是一个模块实现了”强硬”的数据库连接,基于DB-API 2建立的原始连接。一个”强硬”的连接意味着在连接关闭之后,或者使用次数操作限制时会重新连接。
一个典型的例子是数据库重启时,而你的程序仍然在运行并需要访问数据库,或者当你的程序连接了一个防火墙后面的远程数据库,而防火墙重启时丢失了状态时。
一般来说你不需要直接使用 SteadyDB 它只是给接下来的两个模块提供基本服务, PersistentDB 和 PooledDB 。
PersistentDB
DBUtils.PersistentDB 实现了强硬的、线程安全的、顽固的数据库连接,使用DB-API 2模块。如下图展示了使用 PersistentDB 时的连接层步骤:
当一个线程首次打开一个数据库连接时,一个连接会打开并仅供这个线程使用。当线程关闭连接时,连接仍然持续打开供这个线程下次请求时使用这个已经打开的连接。连接在线程死亡时自动关闭。
简单的来说 PersistentDB 尝试重用数据库连接来提高线程化程序的数据库访问性能,并且他确保连接不会被线程之间共享。
因此, PersistentDB 可以在底层DB-API模块并非线程安全的时候同样工作的很好,并且他会在其他线程改变数据库会话或者使用多语句事务时同样避免问题的发生。
PooledDB
DBUtils.PooledDB 实现了一个强硬的、线程安全的、有缓存的、可复用的数据库连接,使用任何DB-API 2模块。如下图展示了使用 PooledDB 时的工作流程:
PooledDB 可以在不同线程之间共享打开的数据库连接。这在你连接并指定 maxshared 参数,并且底层的DB-API 2接口是线程安全才可以,但是你仍然可以使用专用数据库连接而不在线程之间共享连接。除了共享连接以外,还可以设立一个至少 mincached 的连接池,并且最多允许使用 maxcached 个连接,这可以同时用于专用和共享连接池。当一个线程关闭了一个非共享连接,则会返还到空闲连接池中等待下次使用。
如果底层DB-API模块是非线程安全的,线程锁会确保使用 PooledDB 是线程安全的。所以你并不需要为此担心,但是你在使用专用连接来改变数据库会话或执行多命令事务时必须小心。
该选择哪一个?
PersistentDB 和 PooledDB 都是为了重用数据库连接来提高性能,并保持数据库的稳定性。
所以选择何种模块,可以参考上面的解释。 PersistentDB 将会保持一定数量的连接供频繁使用。在这种情况下你总是保持固定数量的连接。如果你的程序频繁的启动和关闭线程,最好使用 PooledDB 。后面将会提到更好的调整,尤其在使用线程安全的DB-API 2模块时。
当然,这两个模块的接口是很相似的,你可以方便的在他们之间转换,并查看哪个更好一些。
官方指南:https://cito.github.io/w4py-olde-docs/Webware/DBUtils/Docs/UsersGuide.html
4 使用
连接池对象只初始化一次,一般可以作为模块级代码来确保。 PersistentDB的连接例子:
import DBUtils.PersistentDB
persist=DBUtils.PersistentDB.PersistentDB(dbpai=MySQLdb,maxusage=1000,kwargs)
这里的参数dbpai指使用的底层数据库模块,兼容DB-API的。maxusage则为一个连接最大使用次数,参考了官方例子。后面的kwargs则为实际传递给MySQLdb的参数。
获取连接: conn=persist.connection() 实际编程中用过的连接直接关闭 conn.close() 即可将连接交还给连接池。
PooledDB使用方法同PersistentDB,只是参数有所不同。
dbapi :数据库接口
mincached :启动时开启的空连接数量
maxcached :连接池最大可用连接数量
maxshared :连接池最大可共享连接数量
maxconnections :最大允许连接数量
blocking :达到最大数量时是否阻塞
maxusage :单个连接最大复用次数
setsession :用于传递到数据库的准备会话,如 [”set name UTF-8″] 。
参考:http://blog.csdn.net/amandaxy/article/details/7327981
其它实例:http://www.2cto.com/database/201605/506745.html
列教程来了!毕业设计头大的伙伴,看过来了!基础薄弱的伙伴,需要视频教程的,可以留言,我整理后发大家!
做一个项目,首先是需求分析,将要做的东西说明白。
然后技术选型,根据需求选择合适的技术架构,小项目适宜采用简单快速的架构,不是什么项目都要搞的很复杂。
然后是开发环境安装,JDK、Eclipse、Tomcat、MySQL、Navicat(用来操作数据库),这个专门拿出一章来讲讲。
然后是整体设计,先想好有哪些页面,哪些类,哪些功能。
然后是具体开发阶段。
最后测试投产,为了方便演示,我们演示下如何把项目打包放到云服务器上,这样演示明显更加高大上。
校园新闻网站非常简单,用户有两类,游客和管理员。
游客可以浏览新闻,无需登录。管理员可以登录后发布新闻。
为了让项目足够简单,不使用Servlet。主要使用JSP,数据库用MySQL。也会涉及一些html和css,毕竟要显示页面嘛,这块尽可能简单点。
所以技术选型为html+css+JSP+MySQL,当然JSP主要还是使用Java语言。
后面的教程,也会继续更新,伙伴们可以关注哦
需要视频教程的伙伴,回复:Java,即可获得!
们可以先通过requests库获取网页数据,然后通过mysql-connector-python库来连接MySQL数据库,实现将数据存储到MySQL数据库中的操作。具体操作步骤如下所示。
安装mysql-connector-python和requests库,可以使用pip进行安装,如下所示。
pip install mysql-connector-python requests
通过mysql-connector-python库来连接MySQL数据库,下面是一个示例代码来演示如何进行连接如下所示。
import mysql.connector
# 配置数据库连接
db_config={
'user': 'your_username',
'password': 'your_password',
'host': 'your_host',
'database': 'your_database'
}
# 创建数据库连接
connection=mysql.connector.connect(**db_config)
cursor=connection.cursor()
爬虫获取数据,使用requests库获取网页数据并解析所需的数据,然后进行数据的提取操作。
import requests
# 获取网页内容
url='https://example.com'
response=requests.get(url)
web_content=response.text
# 假设我们从网页内容中提取某些数据,例如标题和描述
from bs4 import BeautifulSoup
soup=BeautifulSoup(web_content, 'html.parser')
title=soup.title.string
description=soup.find('meta', {'name': 'description'})['content']
将上面的两个代码整合到一起,通过mysql-connector-python库将提取的数据插入到MySQL数据库中,如下所示。
# 定义插入数据的SQL语句
insert_query="""
INSERT INTO your_table (title, description)
VALUES (%s, %s)
"""
# 执行插入操作
cursor.execute(insert_query, (title, description))
# 提交事务
connection.commit()
完成操作后,我们需要关闭数据库连接,如下所示。
# 关闭游标和连接
cursor.close()
connection.close()
下面是将以上所有步骤整合在一起的完整的代码示例,如下所示。
import mysql.connector
import requests
from bs4 import BeautifulSoup
# 配置数据库连接
db_config={
'user': 'your_username',
'password': 'your_password',
'host': 'your_host',
'database': 'your_database'
}
# 创建数据库连接
connection=mysql.connector.connect(**db_config)
cursor=connection.cursor()
try:
# 获取网页内容
url='https://example.com'
response=requests.get(url)
web_content=response.text
# 解析网页内容
soup=BeautifulSoup(web_content, 'html.parser')
title=soup.title.string
description=soup.find('meta', {'name': 'description'})['content']
# 定义插入数据的SQL语句
insert_query="""
INSERT INTO your_table (title, description)
VALUES (%s, %s)
"""
# 执行插入操作
cursor.execute(insert_query, (title, description))
# 提交事务
connection.commit()
except Exception as e:
print(f"Error: {e}")
connection.rollback()
finally:
# 关闭游标和连接
cursor.close()
connection.close()
在这个代码中我们展示了如何实现Python链接MySQL数据,然后将从网页上获取到的数据存储到数据库中,在实际操作过程中,我们可以将上面的数据库链接换成自己的数据库链接,然后将网页数据提取操作换成我们需要的操作就可以完成爬虫数据落库的逻辑了。
*请认真填写需求信息,我们会在24小时内与您取得联系。