在 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])
这里解释器将看到第一个 ?
并从第一个列表中获取第一项,然后当它到达第二个 ?
时它将从第二个列表中获取第一项。如果 ?
的数量与提供的参数数量不匹配,则会抛出错误。
我是编程新手,我有一个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])
这里解释器将看到第一个 ?
并从第一个列表中获取第一项,然后当它到达第二个 ?
时它将从第二个列表中获取第一项。如果 ?
的数量与提供的参数数量不匹配,则会抛出错误。