Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据库中的表中搜索具有相同主键的行_Python_Database_Pandas_Sqlite - Fatal编程技术网

Python 在数据库中的表中搜索具有相同主键的行

Python 在数据库中的表中搜索具有相同主键的行,python,database,pandas,sqlite,Python,Database,Pandas,Sqlite,我有一个数据库————————————————&md。下面的代码中给出了一个示例,其中只有五个表对应于城市名称,但在我的实际问题中,我有数千个。我需要在每个表中选择与时间戳date\u str(每个表的主键)对应的行(如果该时间戳存在于该表中),最后返回一个包含这些行的表以及该行来自的表的名称 有没有一种方

我有一个数据库————————————————&md。下面的代码中给出了一个示例,其中只有五个表对应于城市名称,但在我的实际问题中,我有数千个。我需要在每个表中选择与时间戳
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你考虑过使用索引吗?