python - SQLite 语句中无法识别的标记

标签 python sql database sqlite

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

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"

是小数点后三位的问题吗?

这是表的创建语句:

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

最佳答案

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

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))

关于python - SQLite 语句中无法识别的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31431393/

相关文章:

python - 在 Zapier 中使用此代码时,为什么会出现 Runtime.MarshalError?

Python-变量不会减法?

python - pandas - 根据列值将每行复制 'n' 次

mysql - 我如何知道何时应该优化我的查询?

java - 在 Oreo 上复制 SQLite 数据库

python - 同一数据帧上的多个总和

MySQL Select 首先显示特定列值

SQL Server - 将字符串添加到文本列(相当于 concat)

database - Flutter:如何为我们要上传到Firebase数据库的每个元素设置数据类型?

ruby-on-rails - ruby rails : How to Sync Heroku app and Localhost Database