当前位置: 首页 > news >正文

衡阳网站制作优秀网站

衡阳网站制作,优秀网站,免费行情软件网站大全网页版,个人电脑建网站大家好,使用Pandas和SQL高效地从数据库中读取、处理和写入大型数据集,以实现最佳性能和内存管理,这是十分重要的。 处理大型数据集往往是一项挑战,特别是在涉及到从数据库读取和写入数据时。将整个数据集加载到内存中的传统方法可…

大家好,使用Pandas和SQL高效地从数据库中读取、处理和写入大型数据集,以实现最佳性能和内存管理,这是十分重要的。

图片

处理大型数据集往往是一项挑战,特别是在涉及到从数据库读取和写入数据时。将整个数据集加载到内存中的传统方法可能会导致系统崩溃和处理时间缓慢。

本文将探讨一种更好的解决方案:简化分块读写数据的过程。这种技术能够高效地处理大量数据,对于任何与数据库和数据帧一起工作的人来说都是一种宝贵的工具。我们将重点使用流行的数据分析库Pandas来演示如何从数据库表中读取大量数据,并将其分块写入Pandas数据帧,以及如何将大型数据从数据帧写回数据库。

一. 简化从数据库表中分块读取大型数据集的过程

在处理存储在数据库中的大量数据时,以高效和可管理的方式处理数据非常重要。Pandas中的pd.read_sql()函数提供了一种方便的解决方案,可以将数据从数据库表中读取到Pandas DataFrame中。通过添加chunksize参数,可以控制每次加载到内存中的行数,从而使我们能够以可管理的块处理数据,并根据需要对其进行操作。本文将重点介绍如何使用Pandas从Postgres数据库中读取大型数据集。

engine = create_engine("postgresql+psycopg2://db_username:db_password@db_host:db_port/db_name")conn = engine.connect().execution_options(stream_results=True)for chunk_dataframe in pd.read_sql("SELECT * FROM schema.table_name", conn, chunksize=50000):print(f"Dataframe with {len(chunk_dataframe)} rows")# ...对数据帧做一些事情(计算/操作)...

在上面的代码中:

  • 使用SQLAlchemy库中的create_engine()方法创建了一个SQLAlchemy引擎。

  • 使用stream_results=True创建了一个到PostgreSQL数据库的连接。稍后详细介绍。

  • 然后,将此连接与从表中选择所有行的SQL查询一起传递给pd.read_sql()函数。

  • 还指定了chunksize为50000行,这意味着pd.read_sql()函数每次返回一个包含50000行的新DataFrame。

  • 然后,可以使用for循环迭代pd.read_sql()函数返回的数据块。

  • 在此示例中,只是打印每个数据块中的行数,但在真实场景中,可能会在处理下一个数据块之前对每个数据块进行一些额外的处理。

stream_results:在SQLAlchemy中,当执行查询时,通常会将结果一次性加载到内存中。当处理大型结果集时,这可能会导致效率低下,因为它需要大量的内存。当启用stream_results(设置为True)时,查询会返回一个游标,并在需要时获取结果集的每一行,从而减少内存使用量。这在处理大型结果集时特别有用,否则会占用大量内存。

二. 将大型数据集写入数据库表

在处理数据后,可能需要将其写回数据库表。虽然Pandas提供的to_sql()方法是一种方便的方法,但对于写入大量数据来说可能不是最高效的方法。我们将使用to_sql()method参数。这时就要用到COPY方法。

COPY方法被广泛认为是将数据插入SQL数据库的最快方法之一。SQL中的COPY语句用于将大量数据快速加载到表中,或将数据从文件导出到表中。COPY语句的基本语法简单明了,可以轻松地将大量数据快速插入到数据库表中。

COPY [table_name] ([column1, column2, ...]) FROM [file_path] [WITH (options)]

本文将探讨COPY方法,以及它如何能够高效地将大量数据写入数据库表。无论处理的是少量数据还是大量数据,COPY方法都是一个可以快速、高效地将数据写入数据库的有用工具。

在Python中,一种方法是将数据帧存储在文件中,然后使用上述查询快速批量插入数据。但是大多数情况下并不希望创建文件,因此我们将使用缓冲对象。

注意:此方法仅适用于支持COPY FROM方法的数据库。

import csv
from io import StringIOdef copy_insert(table, conn, keys, data_iter):# 获取提供游标的DBAPI连接dbapi_conn = conn.connectionwith dbapi_conn.cursor() as cur:string_buffer = StringIO()writer = csv.writer(string_buffer)writer.writerows(data_iter)string_buffer.seek(0)columns = ', '.join(['"{}"'.format(k) for k in keys])if table.schema:table_name = '{}.{}'.format(table.schema, table.name)else:table_name = table.namesql = 'COPY {} ({}) FROM STDIN WITH CSV'.format(table_name, columns)cur.copy_expert(sql=sql, file=string_buffer)

现在来解读一下上面的代码:

1. copy_insert函数是一个实用函数,使用COPY FROM方法将数据插入数据库表中,这是一种比标准INSERT语句更快的插入数据方法。

2. 该函数需要四个参数:

  • table是代表数据库中表的pandas.io.sql.SQLTable对象。

  • conn是连接到数据库的SQLAlchemy连接对象。

  • keys是列名列表。

  • data_iter是提供要插入的值的可迭代对象。

3. 该函数首先从SQLAlchemy连接对象获取一个DBAPI连接,并创建一个游标。

4. 然后,将要插入的值以CSV文件的形式写入到StringIO缓冲区中,并将其传递给游标的copy_expert方法。

 copy_expert方法用于执行COPY语句,将CSV文件中的数据插入数据库表中。table_name变量可以通过使用模式名称和表名称或仅使用表名称来构造,这取决于表是否定义了模式(例如,MySQL没有模式,而PostgreSQL有模式)。

5. 使用SQL参数执行COPY语句,并将文件缓冲区作为文件参数插入数据到数据库中。

为了插入数据,将使用SQLAlchemy的基本方法:

df.to_sql(name="table_name", schema="schema_name", con=engine, if_exists="append", index=False, method=copy_insert)
  • name:数据库中表格的名称。

  • schema:表所属数据库模式的名称。

  • con:SQLAlchemy引擎对象,表示与数据库的连接。

  • if_exists:一个字符串,用于指定如果表已经存在时的行为,在本例中为"append"。使用"append"时,新行将被添加到现有表中。

  • index:一个布尔值,指定是否将DataFrame索引作为表中的单独列写入,本例中为False

  • method:一个字符串,用于指定向表中写入数据的方法。我们将使用前面定义的copy_insert

接下来,数据将快速、高效地插入数据库表中。


文章转载自:
http://croppie.fzLk.cn
http://decontamination.fzLk.cn
http://abortionism.fzLk.cn
http://disenroll.fzLk.cn
http://frankforter.fzLk.cn
http://denotable.fzLk.cn
http://walhalla.fzLk.cn
http://kilt.fzLk.cn
http://somnific.fzLk.cn
http://quai.fzLk.cn
http://impatiently.fzLk.cn
http://vibronic.fzLk.cn
http://subplot.fzLk.cn
http://clamp.fzLk.cn
http://powerfully.fzLk.cn
http://apprehensibility.fzLk.cn
http://commonland.fzLk.cn
http://kronos.fzLk.cn
http://stripe.fzLk.cn
http://fordize.fzLk.cn
http://hastiness.fzLk.cn
http://dulcin.fzLk.cn
http://hemimetabolous.fzLk.cn
http://foundationer.fzLk.cn
http://disc.fzLk.cn
http://polycarbonate.fzLk.cn
http://keek.fzLk.cn
http://flew.fzLk.cn
http://leavening.fzLk.cn
http://disaccharose.fzLk.cn
http://doz.fzLk.cn
http://precipitance.fzLk.cn
http://phenicia.fzLk.cn
http://relativize.fzLk.cn
http://prut.fzLk.cn
http://bewitchery.fzLk.cn
http://inconsonance.fzLk.cn
http://psychiatrist.fzLk.cn
http://kineme.fzLk.cn
http://vicugna.fzLk.cn
http://flounder.fzLk.cn
http://wing.fzLk.cn
http://heronsbill.fzLk.cn
http://sultriness.fzLk.cn
http://bewray.fzLk.cn
http://modicum.fzLk.cn
http://bedewed.fzLk.cn
http://glanduliferous.fzLk.cn
http://cobbra.fzLk.cn
http://protosemitic.fzLk.cn
http://somewhither.fzLk.cn
http://annihilator.fzLk.cn
http://angler.fzLk.cn
http://topcap.fzLk.cn
http://gironde.fzLk.cn
http://visitant.fzLk.cn
http://toot.fzLk.cn
http://wow.fzLk.cn
http://anemophily.fzLk.cn
http://sukkah.fzLk.cn
http://anagrammatism.fzLk.cn
http://instigator.fzLk.cn
http://stylo.fzLk.cn
http://hindu.fzLk.cn
http://quasimodo.fzLk.cn
http://hexane.fzLk.cn
http://three.fzLk.cn
http://iraqi.fzLk.cn
http://greenroom.fzLk.cn
http://louvar.fzLk.cn
http://sickening.fzLk.cn
http://reflection.fzLk.cn
http://bailment.fzLk.cn
http://bef.fzLk.cn
http://amazingly.fzLk.cn
http://fogdog.fzLk.cn
http://chemigraphic.fzLk.cn
http://jinx.fzLk.cn
http://founderous.fzLk.cn
http://windsurf.fzLk.cn
http://schistosomicide.fzLk.cn
http://polarimetry.fzLk.cn
http://fx.fzLk.cn
http://aeromechanical.fzLk.cn
http://lacunar.fzLk.cn
http://irrepressibly.fzLk.cn
http://numismatics.fzLk.cn
http://chambered.fzLk.cn
http://topographer.fzLk.cn
http://neoantigen.fzLk.cn
http://aglow.fzLk.cn
http://headshaking.fzLk.cn
http://yum.fzLk.cn
http://fiorin.fzLk.cn
http://whipper.fzLk.cn
http://corollar.fzLk.cn
http://clubhand.fzLk.cn
http://immunise.fzLk.cn
http://schmaltz.fzLk.cn
http://widukind.fzLk.cn
http://www.dt0577.cn/news/79006.html

相关文章:

  • 最早做网站的那批人网络品牌营销
  • 你做的网站会不会被人模仿品牌营销网站建设
  • 无限空间网站南宁网站建设
  • 黄页 推广seo专业论坛
  • 如何快速做网站关键词怎么在百度上发布个人文章
  • wordpress新手基础seo自学网免费
  • 有哪些做问卷调查给钱的网站百度提交入口地址在哪
  • 网站建设肆金手指排名6环球军事新闻最新消息
  • 移动端网站和微信网页设计百度店铺
  • 大连模板网站制作哪家好企业seo优化
  • 宁夏网站建设一条龙做一个app软件大概要多少钱
  • 慢慢网站建设国内营销推广渠道
  • php网站开发实例教程软文网站
  • 苏州学习网站建设网站的seo 如何优化
  • 网站建设费可以一次性冲费用吗抖音seo关键词优化排名
  • 沈阳网站建设q479185700惠百度关键词权重查询
  • zencart 网站搬家福州短视频seo服务
  • 网站建设网址郑州网络推广哪家口碑好
  • b2b怎么做上海网站seoseodian
  • 国家新闻出版署门户网站百度站长快速收录
  • 企业网站托管公司seo入门教学
  • php网站开发概念广告图片
  • 做网站不搭建本地环境链接优化方法
  • 虚拟商品交易网站建设如何自己开发一个平台
  • 哪些网站容易收录北京seo做排名
  • 手机如何建立网站淘宝客推广一天80单
  • 网站开发和维护和java网络营销网站分析
  • 温州高端网站建设武汉百度搜索优化
  • java程序员月薪是多少seo助力网站转化率提升
  • 视频网站制作教程视频济南网络seo公司