在python中添加SQL for循环

在python中添加SQL for循环,python,pandas,read-sql,Python,Pandas,Read Sql,我是一名编程新手,我有一个数据库文件,其中包含一些日期、打开、高、低、关闭数据,名称为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, Volum

我是一名编程新手,我有一个数据库文件,其中包含一些日期、打开、高、低、关闭数据,名称为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“选择日期、打开、高、低、关闭、来自0001.HK的卷”的执行失败:无法识别的令牌:0001.HK

但是我应该在数据库中有0001.HK表
我应该怎么做?

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

connect = 'select Date, Open, High, Low, Close, Volume from ?'
之后,在read_sql中,您可以向参数kwarg提供变量列表,如下所示:

df = pd.read_sql(connect, conn, params=[stock_id], index_col=['Date'], parse_dates=['Date'])
如果您有多个参数,因此有多个?占位符然后,当您向参数提供变量列表时,它们的顺序必须与您的?完全相同

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

开始=['日期列表'] end=['另一个日期列表'] 查询=选择* 从桌子上 开始日期>=在哪里?和 结束日期<? df=pd.read\u sql\u queryquery,conn,params=[start,end]
在这里,译员将看到第一个?从第一个列表中抓取第一项,然后当它到达第二项时?它将从第二个列表中获取第一项。如果数量不匹配?以及提供的参数的数量,然后它将抛出一个错误。

尝试添加一个“围绕您传递的值,读取价格”+stry.zfill4+.HK”它可以工作,非常感谢!!然后还有另外一个问题……循环时我怎么能跳过没有这样的表呢?你会遇到什么样的错误?您只需添加一个指定错误类型的try-except语句,并在表不存在时让它简单地传递即可。@pavel您好,先生!谢谢你再次回答我,我看到有人在使用,除了:passits不起作用,但我发现我不应该用数字范围循环文件名。。。在我的sql db中,有些数字不存在,如0012.HKexist;0013.3不存在;0014.HKexist,所以我认为不应该循环使用文件名,但我不确定如何逐个读取sqlone@y2kmarkham,这很奇怪,因为除了:pass应该有效,尽管像这样使用它是一个非常坏的习惯。改为执行exception%ExceptionClass%:用实际获得的异常类替换%ExceptionClass%。请确保pass位于下一行并正确缩进。非常感谢,但我对占位符有点困惑,我是否正确地放置了“选择…”。。。从“+股票id”开始?不,你放了?作为查询的占位符。一旦译员到达现场?它将查看是否向params kwarg提供了任何内容,如果所有内容都匹配,它将自动填充数据,否则将抛出错误。@y2kmarkham,请参阅我的答案中添加的编辑部分。