Python 在数据库中的表中搜索具有相同主键的行
我有一个数据库————————————————&md。下面的代码中给出了一个示例,其中只有五个表对应于城市名称,但在我的实际问题中,我有数千个。我需要在每个表中选择与时间戳Python 在数据库中的表中搜索具有相同主键的行,python,database,pandas,sqlite,Python,Database,Pandas,Sqlite,我有一个数据库————————————————&md。下面的代码中给出了一个示例,其中只有五个表对应于城市名称,但在我的实际问题中,我有数千个。我需要在每个表中选择与时间戳date\u str(每个表的主键)对应的行(如果该时间戳存在于该表中),最后返回一个包含这些行的表以及该行来自的表的名称 有没有一种方
date\u str
(每个表的主键)对应的行(如果该时间戳存在于该表中),最后返回一个包含这些行的表以及该行来自的表的名称
有没有一种方法可以加速这段代码,而不需要重新构造整个数据库(也许有一种方法可以一次对所有表调用SELECT
,而不是在表中循环)?请注意,cities
是固定的,而date\u str
是一个参数
import sqlite3
import pandas as pd
conn = sqlite3.connect(f'my_database.db')
c = conn.cursor()
cities = ('sanfrancisco', 'dallas', 'newyork', 'chicago', 'miami')
columns = ('timestamp', 'population', 'averageincome')
def get_data(date_str):
data = []
for city in cities:
c.execute(f"SELECT * from {city} WHERE timestamp='{date_str}'")
result = c.fetchall()
if result: # will be False if no data was recorded for date given by date_str
data.append([city] + list(result[0]))
return pd.DataFrame(data, columns=columns)
现在的表演怎么样?您是否进行过基准测试/评测?为什么要执行
结果[0]
,其中还有什么?您如何调用get_data()
函数,它是如何使用的?与城市名称对应的五个表,这很大程度上表明您应该只使用一个表,以城市为列。@AMC,很抱歉,我还没有做任何正确的分析。似乎有一种方法可以不用循环就能做到这一点,所以我想我会问。我可能会介绍一下,但考虑到@Shawn的评论,我想我可能需要首先重组我的数据库。回答你的问题result[0]
是一个元组,包含与给定城市和时间戳相关联的列,并且在循环中为timestamp
的不同值反复调用get_data()
@Shawn,感谢您的建议。我会重组我的数据库,然后再联系你。@VivekSubramanian你考虑过使用索引吗?