我可以在python中查询数据库时使用字符串格式

时间:2015-08-30 10:46:09

标签: python sql sqlite

我一直在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中尝试相同的查询时,为什么不在这里呢?

2 个答案:

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