python 3将值从一个sqlite数据库中的分离表存储到列表

时间:2018-07-23 15:47:55

标签: python python-3.x sqlite

我是python的初学者。

我的数据库中有几个表(table1,table2,table3等),它们具有相同的列TotalPrice

我要将所有表中的TotalPrice存储在一个列表中

TotalPrice是通过以下代码提取的:

for j, v in enumerate(busList):
                mc.execute('SELECT TotalPrice FROM bus'+v+' WHERE Date BETWEEN '+StartDate+' AND '+EndDate+'')
                p = mc.fetchall()
                price = [i[0] for i in p] 

但是我不知道如何仅将它们存储在一个列表中!!!!

3 个答案:

答案 0 :(得分:1)

使用UNION ALL,它将得到更好的性能,因为它将是发送到数据库的单个查询:

mc.execute(' UNION ALL '.join(
    'SELECT TotalPrice FROM bus{} WHERE Date BETWEEN ? AND ?'.format(v) 
        for v in busList), 
    (StartDate, EndDate) * len(busList),
)

请注意,这还对日期使用参数化,而不是字符串插值,因此除了性能更好之外,还使您摆脱了报价地狱,并防止了所有形式的注入。

答案 1 :(得分:0)

您可以使用append()中的list方法(或extend,这取决于您想要什么-Difference between append vs. extend list methods in Python

price_list = []
for j, v in enumerate(busList):
    mc.execute('SELECT TotalPrice FROM bus'+v+' WHERE Date BETWEEN '+StartDate+' AND '+EndDate+'')
    p = mc.fetchall()
    price_list.append([i[0] for i in p])

此后,price_list将包含带有表中所有价格的列表。

答案 2 :(得分:0)

您可以按照@Andrej的建议直接将其追加到空白列表中,或者使用此方法

import pandas as pd
import sqlite3

conn = sqlite3.connect("db")
df = pd.read_sql_query("select TotalPrice from table1 Union all
                        select TotalPrice from table2;", conn)
myList = df['TotalPrice'].tolist()