我一直在python中学习sqlite3
,我想知道是否可以使用字符串格式来编辑数据库或查询它。
e.g。 - SELECT %s FROM (table_name) where %
可以是存储在变量中的用户输入吗?
我尝试了但它没有用,所以有人可以给我一个有效的例子。
感谢任何帮助。感谢
伙计们我试过这个:
dursor = conn.execute("SELECT id FROM books")
# this helps find the correct id for storing in the database
for i in dursor:
lis.append(i[0])
command = """INSERT INTO books VALUES ({0}, {name}, {author})""".format(lis[-1] + 1, name=client_name, author = client_author)
然后
conn.execute(command)
但它不返回这样的列(名称)
当我在khan academy sql中尝试相同的查询时,为什么不在这里呢?
答案 0 :(得分:0)
我不确定你是否可以在sqlite3中这样做,但如果我是你,我会寻找任何替代方法。您是否真的想让用户能够实时更改您的SQL?这是你正在创造的潜在巨大安全漏洞。
e.g。用户基本上可以改变......
select ? from innocentTable
...到...
select * from tblUser -- from innocentTable
...并拖拽整个用户表,只需要进行一些猜测就可以得出对象名称。
我建议您阅读SQL注入攻击,然后寻找另一种方法来实现您的建议。
答案 1 :(得分:0)
您可以在查询字符串上放置问号,并在将.execute()作为元组调用时从用户输入传递参数。
虽然我不相信你在制作中使用它。如果是这种情况,首先从用户那里获取数据,清理它,看看你是否真的想让用户做他真正想做的事情。
希望这会有所帮助:
param1 = sys.argv[1]
param2 = sys.argv[2]
query = "SELECT ? FROM (table_name) where id = ?"
cursor.execute(query, (param1,param2))