亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL參數化查詢

MySQL參數化查詢

狐的傳說 2019-06-17 15:57:09
MySQL參數化查詢我很難使用MySQLdb模塊將信息插入到我的數據庫中。我需要在表中插入6個變量。cursor.execute ("""     INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)     VALUES         (var1, var2, var3, var4, var5, var6) """)有誰能幫我解決這里的語法問題嗎?
查看完整描述

5 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

小心在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語句中的參數的修飾符在不同的DBAPI實現中和MySQL客戶端庫使用的不同。printf樣式語法,而不是更普遍接受的‘?’標記(由例如。python-sqlite).


查看完整回答
反對 回復 2019-06-17
?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

你有幾個選擇。您將希望能夠適應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”外觀也很糟糕:)


查看完整回答
反對 回復 2019-06-17
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

鏈接的文檔提供了以下示例:

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

(如果Song Length是數字,則可能需要使用%d而不是%s)。


查看完整回答
反對 回復 2019-06-17
  • 5 回答
  • 0 關注
  • 1920 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號