这两个命令在执行时间方面有区别吗:
import pandas as pd
df=pd.read_sql_query('SELECT * FROM TABLE',conn)
df=pd.read_sql_table(TABLE, conn)
谢谢你的帮助
最佳答案
我尝试了无数次,尽管我在上面读到了,但我不同意大部分过程或结论。
如果你要比较两种方法,添加厚层的 SQLAlchemy 或 pandasSQL_builder(即 pandas.io.sql.pandasSQL_builder , 没有那么多 import) 和其他这样的 non self-contained 片段至少可以说是没有帮助的。在没有噪音的情况下比较两种方法的唯一方法是尽可能干净地使用它们,至少在类似的情况下使用它们。
有一种关于假设的说法......在假设差异不明显和提出关于 pd.read_sql_query 的无用考虑之间,这一点变得非常模糊。这里唯一明显的考虑因素是,如果有人在比较 pd.read_sql_query 和 pd.read_sql_table,那是表,整个表,什么都没有 table 。调用 where、join 和其他方法只是在浪费时间。
此外,该问题明确询问 read_sql_table 和 read_sql_query 与 SELECT * FROM table 之间的区别。
我在 SQLite、MariaDB 和 PostgreSQL 上一遍又一遍地运行它。我专门使用 SQLAlchemy 来创建引擎,因为 pandas 需要这个。数据来自coffee-quality-database我将所有三个引擎中的文件 data/arabica_data_cleaned.csv 预加载到名为 coffee
arabica 的表中
这是我的脚本的摘要版本:
import time
import pandas as pd
from sqlalchemy import create_engine
sqlite_engine = create_engine('sqlite:///coffee.db', echo=False)
mariadb_engine = create_engine('mariadb+mariadbconnector://root:admin@127.0.0.1:3306/coffee')
postgres_engine = create_engine('postgresql://postgres:admin@127.0.0.1:5432/coffee')
for engine in [sqlite_engine, mariadb_engine, postgres_engine]:
print(engine)
print('\tpd.read_sql_query:')
startTime = time.time()
for i in range(100):
pd.read_sql_query('SELECT * FROM arabica;', engine)
print(f"\t[-- TIME --] {time.time()-startTime:.2f} sec\n")
print('\tpd.read_sql_table:')
startTime = time.time()
for i in range(100):
pd.read_sql_table('arabica', engine)
print(f"\t[-- TIME --] {time.time()-startTime:.2f} sec\n")
版本是:
这是一个示例输出:
Engine(sqlite:///coffee.db)
pd.read_sql_query:
[-- TIME --] 2.58 sec
pd.read_sql_table:
[-- TIME --] 3.60 sec
Engine(mariadb+mariadbconnector://root:***@127.0.0.1:3306/coffee)
pd.read_sql_query:
[-- TIME --] 2.84 sec
pd.read_sql_table:
[-- TIME --] 4.15 sec
Engine(postgresql://postgres:***@127.0.0.1:5432/coffee)
pd.read_sql_query:
[-- TIME --] 2.18 sec
pd.read_sql_table:
[-- TIME --] 4.01 sec
上面是一个示例输出,但我一遍又一遍地运行它,唯一的观察是在每次运行中,pd.read_sql_table strong>ALWAYS 比 pd.read_sql_query 花费的时间更长。这听起来非常违反直觉,但这就是为什么我们在向此处提供知识之前实际隔离问题并测试。
我还没有机会对结果进行适当的统计分析,但乍一看,我会冒着风险声明差异显着,因为“列”(query 和table timings)在很近的范围内(从运行到运行)返回并且都非常远。在某些运行中,table 对某些引擎花费两倍的时间。
如果/当我有机会进行这样的分析时,我会用结果和 matplotlib 证据来补充这个答案。
我最初的想法是调查当表达到数千列时 SQL 与 MongoDB 的适用性。 pdmongo.read_mongo(来自 pdmongo 包)破坏了 pd.read_sql_table — 它对大型表的表现很差 — 但不及 pd.read_sql_query.
pd.read_sql_query 有大约 900 列,比 pd.read_sql_table 高出 5 到 10 倍!
关于python - pandas read sql query 和 read sql table 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48171611/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p