我是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]
但是我不知道如何仅将它们存储在一个列表中!!!!
答案 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()