SQLite statemens中无法识别的标记

2024-05-12 20:41:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将数据从一个表插入到另一个表,但是由于某种原因,我得到了“无法识别的令牌”。这是代码:

cur.execute("INSERT INTO db.{table} SELECT distinct latitude, longitude, port FROM MessageType1 WHERE latitude>={minlat} AND latitude<={maxlat} AND longitude>= {minlong} AND longitude<= {maxlong}".format(minlat = bottomlat, maxlat = toplat, minlong = bottomlong, maxlong = toplong, table=tablename))

这转化为以下值:

INSERT INTO db.Vardo SELECT distinct latitude, longitude, port FROM MessageType1 WHERE latitude>=69.41 AND latitude<=70.948 AND longitude>= 27.72 AND longitude<= 28.416

错误代码如下:

sqlite3.OperationalError: unrecognized token: "70.948 AND"

有三个小数点的问题吗?

这是表的create语句:

cur.execute("CREATE TABLE {site} (latitude, longitude, port)".format(site = site))

Tags: andfromexecutedbporttablesiteselect
2条回答

不要通过字符串格式设置SQL查询,使用驱动程序的能力准备SQL查询并将参数传递到查询中-这样可以避免SQL注入,并使传递不同类型参数的处理透明:

query = """
    INSERT INTO 
        db.{table} 
    SELECT DISTINCT
        latitude, longitude, port 
    FROM 
        MessageType1 
    WHERE 
        latitude >= ? AND 
        latitude <= ? AND 
        longitude >= ? AND 
        longitude <= ?
""".format(table=tablename)
cur.execute(query, (bottomlat, toplat, bottomlong, toplong))

尝试使用?对于您的参数:

cur.execute("INSERT INTO db.? SELECT distinct latitude, longitude, port FROM MessageType1 WHERE latitude>=? AND latitude<=? AND longitude>= ? AND longitude<= ?",(bottomlat, toplat, bottomlong, toplong, tablename))

相关问题 更多 >