根据python变量的值从表中检索数据

时间:2018-09-19 04:49:20

标签: python sqlite

我正在编写一个函数,该函数将根据用户提供的参数从sqlite表中检索数据。这是到目前为止的功能

def database_retrieve(db_file, id):
    try:
        conn = sqlite3.connect(db_file)

        with conn:
            sql_command = "SELECT * FROM my_table WHERE id = "+id

            cur = conn.cursor()
            cur.execute(sql_command)
            result = cur.fetchall()

            return result

    except Exception as e:
        print(e)

db_file = 'testdb.db'
print(database_retrieve(db_file, 'subject1'))

这给了我以下错误

no such column: subject1
None

当我将subject1(它是idmy_table列下的条目)添加到这样的sql命令中时

sql_command = "SELECT * FROM my_table WHERE id = 'subject1'"

它工作正常并打印所有数据。

我是sqlite3的新手。请帮忙。预先感谢

这些是我到目前为止所使用的链接 Python sqlite3 string variable in execute

https://www.dummies.com/programming/databases/how-to-retrieve-data-from-specific-rows-in-mysql-databases/

2 个答案:

答案 0 :(得分:1)

执行此操作

sql_command = "SELECT * FROM my_table WHERE id = "+id

sql_command的值为

"SELECT * FROM my_table WHERE id = subject1"

如您所见,subject1不在引号中。 sqlite认为这是一列,这就是为什么您看到该错误。

相反,这样做

sql_command = "SELECT * FROM my_table WHERE id = ?"
cur.execute(sql_command, [id])

?充当变量id的占位符。

sqlite3官方文档中提到了其他一些方法 https://docs.python.org/2/library/sqlite3.html

答案 1 :(得分:0)

正在生成的sql_command字符串应类似于以下内容(格式化字符串):

sql_command = "SELECT * FROM my_table WHERE id = %s AND name = %s" % (212212, 'shashank')