2024-06-07 05:13:55 发布
网友
我很难使用MySQLdb模块将信息插入到我的数据库中。我需要在表中插入6个变量。
cursor.execute (""" INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation) VALUES (var1, var2, var3, var4, var5, var6) """)
有人能帮我学一下这里的语法吗?
链接的文档提供了以下示例:
cursor.execute (""" UPDATE animal SET name = %s WHERE name = %s """, ("snake", "turtle")) print "Number of rows updated: %d" % cursor.rowcount
所以你只需要根据你自己的代码调整它-例如:
cursor.execute (""" INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation) VALUES (%s, %s, %s, %s, %s, %s) """, (var1, var2, var3, var4, var5, var6))
(如果SongLength是数字,则可能需要使用%d而不是%s)。
你有几个选择。您将希望熟悉python的字符串对象化。当你想知道这样的事情时,这个词可能会让你在以后的搜索中获得更大的成功。
更适合查询:
some_dictionary_with_the_data = { 'name': 'awesome song', 'artist': 'some band', etc... } cursor.execute (""" INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation) VALUES (%(name)s, %(artist)s, %(album)s, %(genre)s, %(length)s, %(location)s) """, some_dictionary_with_the_data)
考虑到您可能已经在一个对象或字典中包含了所有数据,第二种格式将更适合您。另外,当您必须在一年内回来更新此方法时,必须将“%s”外观计数为一个字符串也是很糟糕的:)
小心对SQL查询使用字符串插值,因为它无法正确转义输入参数,并且会使应用程序暴露于SQL注入漏洞。这一差别看似微不足道,但实际上却是巨大的。
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
这增加了一个混淆,即用于绑定SQL语句中的参数的修饰符在不同的DB API实现之间有所不同,mysql客户机库使用printf样式的语法,而不是更常见的'?'标记(由例如python-sqlite使用)。
printf
python-sqlite
链接的文档提供了以下示例:
所以你只需要根据你自己的代码调整它-例如:
(如果SongLength是数字,则可能需要使用%d而不是%s)。
你有几个选择。您将希望熟悉python的字符串对象化。当你想知道这样的事情时,这个词可能会让你在以后的搜索中获得更大的成功。
更适合查询:
考虑到您可能已经在一个对象或字典中包含了所有数据,第二种格式将更适合您。另外,当您必须在一年内回来更新此方法时,必须将“%s”外观计数为一个字符串也是很糟糕的:)
小心对SQL查询使用字符串插值,因为它无法正确转义输入参数,并且会使应用程序暴露于SQL注入漏洞。这一差别看似微不足道,但实际上却是巨大的。
不正确(存在安全问题)
正确(带转义)
这增加了一个混淆,即用于绑定SQL语句中的参数的修饰符在不同的DB API实现之间有所不同,mysql客户机库使用
printf
样式的语法,而不是更常见的'?'标记(由例如python-sqlite
使用)。相关问题 更多 >
编程相关推荐