在 python 中添加 SQL for 循环

Adding SQL for loop in python

我是编程新手,我有一个db文件,里面有一些日期,开盘价,最高价,最低价,收盘价,名称为0001.HK; 0002.HK; 0003.HK 然后我尝试建立一个循环来取出数据库中的一些数据。

conn = sqlite3.connect(os.path.join('data', "hkprice.db"))


def read_price(stock_id):
    
    connect = 'select Date, Open, High, Low, Close, Volume from ' + stock_id
    df = pd.read_sql(connect, conn,index_col=['Date'], parse_dates=['Date'])

for y in range(1 ,2):
    read_price(str(y).zfill(4) + '.HK')

输出时显示:sql 'select Date, Open, High, Low, Close, Volume from 0001.HK' 执行失败:无法识别的标记:“0001.HK”

但我应该在数据库中有 0001.HK table 我该怎么办?

如果要在查询中使用变量,则需要放置一个占位符 ?。所以在你的特殊情况下:

connect = 'select Date, Open, High, Low, Close, Volume from ?'

之后,在 read_sql 中,您可以像这样向 params kwarg 提供变量列表:

df = pd.read_sql(connect, conn, params=[stock_id], index_col=['Date'], parse_dates=['Date'])

如果您有多个参数,因此有多个 ? 占位符,那么当您向 params 提供变量列表时,它们的顺序需要与您的 ?.

编辑: 例如,如果我有一个查询,我想在其中获取某些日期之间的数据,我会这样做:

start = ['list of dates']
end = ['another list of dates']

query = """select * 
           from table
           where start_date >= ? and
                 end_date < ?
        """

df = pd.read_sql_query(query, conn, params=[start, end])

这里解释器将看到第一个 ? 并从第一个列表中获取第一项,然后当它到达第二个 ? 时它将从第二个列表中获取第一项。如果 ? 的数量与提供的参数数量不匹配,则会抛出错误。