簡體   English   中英

如何使用python正確地將字符串插入mysql?

[英]How to insert string into mysql using python correctly?

我是python和mysql的新手。 當我嘗試插入一些帶有字符串字段的記錄時,我無法將它們插入到mysql中,因為它總是報告錯誤,例如: ProgrammingError: (1064, 'You have an error in your SQL syntax 。我很困惑。有時,我發現它通過在字符串字段中添加其他“”來工作,如下所示:

history_market_table_name = 'my_test'
f = ['field_a', 'field_b', 'field_c', 'field_d']
r = ['a', 'b', 'c', 'd']
my_time = "'" + str(datetime.now()) + "'"
target_sql = "insert into %s (time, %s, %s, %s, %s) values(%s, %s, %s, %s, %s)"  % (
history_market_table_name, f[0], f[1], f[2], f[3], my_time, repr(r[0]), repr(r[1]), repr(r[2]), repr(r[3]))

抱歉,代碼很繁瑣。 而且,我的方法肯定有問題-插入字符串類型的字段不會那么愚蠢! 看一下my_time變量,多么荒謬。

任何人都請解釋如何使用python將字符串正確插入mysql。 我辭職了。 因此,請給出正確的答案,並高度贊賞詳細的解釋。

將格式字符串更改為

"insert into %s (time, %s, %s, %s, %s) values(%s, '%s', '%s', '%s', '%s')"

即,您要插入的否則未加引號的字符串值周圍的單引號-會丟失%之后的repr調用。 如果您要插入一個包含 '字符的字符串值,這仍然會失敗。有更好的方法,但是它們不允許您對表名和字段名進行參數設置(這是一個真正的特殊要求...),僅

補充:由於OP要求“'target_sql'變量的直接表達式”,因此它是:

fmt_str = "insert into %s (time, %s, %s, %s, %s) values(%s, '%s', '%s', '%s', '%s')"
target_sql = fmt_str % (history_market_table_name, f[0], f[1], f[2], f[3], 
                        my_time, r[0], r[1], r[2], r[3])

我認為這種方式拆分起來更具可讀性。 至於OP還需要的“用於此類事情的一些文檔”,MySQL的每個版本都有這樣的文檔(OP並未提及他或她使用的版本),Python也是如此(同上,同上)。

在“更好的方式”(這可是不允許參數化的表和字段名)涉及的SQL字符串代替值使用“占位符”,而不是字符串替換。

在這里,sql =“插入my_test(時間,field_a,field_b,field_c,field_d)值(%s,%s,%s,%s,%s)'

(具有硬編碼的,未參數化的表和字段名),以及更高版本,對於在MySql DB上打開的給定cursor

cursor.execute(sql, (
    str(datetime.now()), r[0], r[1], r[2], r[3]))

無需擔心報價或“ sql注入”攻擊的任何可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM