Python接入不同类型数据库的通用接口方法

Python接入不同类型数据库的通用接口方法,第1张

日常数据管理工作中,需要处理存储在不同类型数据库系统的数据。对这些数据的管理,常见的是使用Navicat,DBeaver等管理工具。在对大量数据分析时,需要提取到Python/R中进行处理。下面 探索 Python调用MySQL,MongoDB,InfluxDB等多种类型数据库通用连接方法。实现方式是在Python中封装各类数据库接口包。

实现后的效果:1安全。接口信息封装便于保密管理;2复用。一次封装,永久复用;3上手快。方便不熟悉python和数据调用的同学,只会简单的sql即可使用,省时省力。

下面以MySQL,MongoDB,InfluxDB为例定义接口方法,然后把它们封装成1个通用方法。

mysql_get(sql,db):

mongo_get(sql,db):

influx_get(sql,db):

可以看到,以上函数共同调用的参数为sql和db。我们再增加一个参数db_type,将构造一个通用的方法对以上数据库调用。

同理,其他类型的数据库也可以加入到这个通用框架中,包括但不限于各类关系型,键值型,时序型数据库。

下载mysqlconnector库

然后把爬虫爬到的bai数据通过mysql里面的insert语句查到du数据库,当然也可以zhi建表dao,一般我没用python建表 是先建好再写数据的

import mysqlconnector

conn = mysqlconnectorconnect(

user='root',

password='root',

host='127001',

port='3306',

database='test_demo'

)

cursor = conncursor()

cursorexecute("INSERT INTO test_user(`uuid`,`user_name`,`user_level`) VALUES (%s,%s,%s)",[id, user_name, user_level])

cursorexecute("INSERT INTO tieba_user_detail(`user_name`,`user_exp`,`user_sex`,`tieba_age`,`tieba_note`,`user_favorites`,`user_fans`) VALUES (%s,%s,%s,%s,%s,%s,%s)",[user_name,user_exp,user_sex, tieba_age,tieba_note, user_favorites, user_fans])

print(' %s %s 数据保存成功 '%(user_rank,user_name))

conncommit()

cursorclose()

感觉你这个没有现成的,到时有个模版推荐,

第5章 Python网络爬虫

51 爬虫基础

511 初识爬虫

512 网络爬虫的算法

52 爬虫入门实战

521 调用API

522 爬虫实战

53 爬虫进阶—高效率爬虫

531 多进程

532 多线程

533 协程

534 小结

第6章 Python数据存储

61 关系型数据库MySQL

611 初识MySQL

612 Python *** 作MySQL

62 NoSQL之MongoDB

621 初识NoSQL

622 Python *** 作MongoDB

63 本章小结

631 数据库基本理论

632 数据库结合

633 结束语

第7章 Python数据分析

71 数据获取

711 从键盘获取数据

712 文件的读取与写入

713 Pandas读写 *** 作

72 数据分析案例

721 普查数据统计分析案例

722 小结

来源:《Python 3破冰人工智能 从入门到实战》

Python实现简单多线程任务队列

最近我在用梯度下降算法绘制神经网络的数据时,遇到了一些算法性能的问题。梯度下降算法的代码如下(伪代码):

defgradient_descent(): # the gradient descent code plotlywrite(X, Y)

一般来说,当网络请求 plotly 绘图时会阻塞等待返回,于是也会影响到其他的梯度下降函数的执行速度。

一种解决办法是每调用一次 plotlywrite 函数就开启一个新的线程,但是这种方法感觉不是很好。 我不想用一个像 cerely(一种分布式任务队列)一样大而全的任务队列框架,因为框架对于我的这点需求来说太重了,并且我的绘图也并不需要 redis 来持久化数据。

那用什么办法解决呢?我在 python 中写了一个很小的任务队列,它可以在一个单独的线程中调用 plotlywrite函数。下面是程序代码。

fromthreadingimportThreadimportQueueimporttime classTaskQueue(QueueQueue):

首先我们继承 QueueQueue 类。从 QueueQueue 类可以继承 get 和 put 方法,以及队列的行为。

def__init__(self, num_workers=1): QueueQueue__init__(self) selfnum_workers=num_workers selfstart_workers()

初始化的时候,我们可以不用考虑工作线程的数量。

defadd_task(self, task,args,kwargs): args=argsor() kwargs=kwargsor{} selfput((task, args, kwargs))

我们把 task, args, kwargs 以元组的形式存储在队列中。args 可以传递数量不等的参数,kwargs 可以传递命名参数。

defstart_workers(self): foriinrange(selfnum_workers): t=Thread(target=selfworker) tdaemon=True tstart()

我们为每个 worker 创建一个线程,然后在后台删除。

下面是 worker 函数的代码:

defworker(self): whileTrue: tupl=selfget() item, args, kwargs=selfget() item(args,kwargs) selftask_done()

worker 函数获取队列顶端的任务,并根据输入参数运行,除此之外,没有其他的功能。下面是队列的代码:

我们可以通过下面的代码测试:

defblokkah(args,kwargs): timesleep(5) print“Blokkah mofo!” q=TaskQueue(num_workers=5) foriteminrange(1): qadd_task(blokkah) qjoin()# wait for all the tasks to finish print“Alldone!”

Blokkah 是我们要做的任务名称。队列已经缓存在内存中,并且没有执行很多任务。下面的步骤是把主队列当做单独的进程来运行,这样主程序退出以及执行数据库持久化时,队列任务不会停止运行。但是这个例子很好地展示了如何从一个很简单的小任务写成像工作队列这样复杂的程序。

defgradient_descent(): # the gradient descent code queueadd_task(plotlywrite, x=X, y=Y)

修改之后,我的梯度下降算法工作效率似乎更高了。如果你很感兴趣的话,可以参考下面的代码。fromthreadingimportThreadimportQueueimporttime classTaskQueue(QueueQueue): def__init__(self, num_workers=1):QueueQueue__init__(self)selfnum_workers=num_workersselfstart_workers() defadd_task(self, task,args,kwargs):args=argsor()kwargs=kwargsor{}selfput((task, args, kwargs)) defstart_workers(self):foriinrange(selfnum_workers):t=Thread(target=selfworker)tdaemon=Truetstart() defworker(self):whileTrue:tupl=selfget()item, args, kwargs=selfget()item(args,kwargs)selftask_done() deftests():defblokkah(args,kwargs):timesleep(5)print"Blokkah mofo!" q=TaskQueue(num_workers=5) foriteminrange(10):qadd_task(blokkah) qjoin()# block until all tasks are doneprint"All done!" if__name__=="__main__":tests()

1、数据收集:(1)Scrapy:协助使用者自动提取网页所需信息,并将其整理为表格或JSON格式的数据结构;(2)Selenium:使用者在感兴趣的网站上已经进行了交互行为之后,Seleniumn一般能派上用场;(3)BeautifulSoup:用来收集网站内容的Python库,更适合应用于规模相对较小的问题或一次性任务。

2、数据清理和转化:(4)Pandas:必须学习的,使用者可以运用Pandas *** 控处于Pandas数据框架内的数据,而且其内置巨量的函数,帮助使用者进行数据转换;(5)Numpy:必须学习的,Numpy将Python的对象列表拓展成了全面的多维度序列,而且其内置海量的数学函数;(6)Spacy:帮助使用者将自由文本转化为结构型数据,支持多种语言版本。

3、数据可视化:(7)Matplotlib:最全面的Python数据可视化库;(8)Plotly:只需要写最少的代码就能得出最多彩缤纷的图像。

4、数据模块化:(9)Scikit Learn:高级分析师,开启机器学习之旅,有六大主要模块:数据预处理,维度缩减,数据回归,数据分类,数据聚类分析,模型选择;(10)Tensorflow:由谷歌推出的来源机器学习库,是一个基于网页自动生成的仪表盘,它将数据学习流和结果进行了可视化处理,这一功能对于排错和展示都十分有用;(11)PyTorch:由Facebook发布的一个开源库,用作Python的公共机器学习框架。

5、音频和图像识别:(12)OpenCV:是最常用的图像和视频识别库,能让Python在图像和视频识别领域完全替代Matlab,不仅支持Python,还支持JAVA和Matlab;(13)Librosa:是一个非常强大的音频和声音处理Python库,可以从音频段中提取各个部分,例如节奏以及节拍。

6、网页:(14)Django:开发网页服务后端,设计理念是能用几行代码就建立一个网站的高级框架;(15)Flask:是一个用于Python的轻量级网页开发框架。

Python中常用的数据库有很多,需要根据不同的业务和应用场景来选择合适的数据库,才能使程序更高效

一般常用的主要有MySQL,Redis,MangoDB等数据库

学习这些数据库,可以看黑马程序员视频库的学习视频,有代码、有资料,有PPT,不了解还可以问老师!

以上就是关于Python接入不同类型数据库的通用接口方法全部的内容,包括:Python接入不同类型数据库的通用接口方法、python列表套列表的数据结构怎么存入数据库、怎么用python编写以下要求的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10181053.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存