2015-12-31 55 views
0

我試圖使用Python及其MySQLdb模塊將當前日期插入到MySQL中。我可以成功地插入數據,例如:將日期插入Python MySQLdb

insert = "INSERT INTO table(utdate) VALUES('2015-12-31')" 

不過,我不想硬編碼的日期,而寧願使用一個變量或函數,如:我已經嘗試了所有

today = time.strftime('%Y-%m-%d') 

以下查詢但沒有成功。成功輸入數據庫應該顯示爲datetime.date(2016,01,01)。在每個查詢下面都是錯誤消息或輸入數據庫的結果。

insert = "INSERT INTO table(utdate) VALUES(today)" 
_mysql_exceptions.OperationalError: (1054, "Unknown column 'today' in 'field list'") 

insert = "INSERT INTO table(utdate) VALUES('today')" 
(None) 

insert = "INSERT INTO table(utdate) VALUES('%s')" % (today) 
(None) 

insert = "INSERT INTO table(utdate) VALUES(%s)" % (today) 
(None) 

我的直覺是,這個問題必須做一些事情與今天的變量,因爲它是一個字符串,我必須用引號將其插入。你有什麼想法和建議?

在此先感謝。

回答

0

使用準備好的語句,db api將爲您處理類型映射。從http://mysql-python.sourceforge.net/MySQLdb.html#some-examples

import MySQLdb 
db=MySQLdb.connect(passwd="moonpie",db="thangs") 

的文檔,執行查詢,你首先需要一個光標,然後就可以執行 查詢就可以了:

c=db.cursor() 
max_price=5 
c.execute("""SELECT spam, eggs, sausage FROM breakfast 
      WHERE price < %s""", (max_price,)) 

在這個例子中, max_price=5那麼爲什麼在字符串中使用%s?由於 MySQLdb會將其轉換爲SQL文字值,即字符串 '5'。完成後,查詢實際上會說「...WHERE price < 5」。

爲什麼這個元組?因爲DB API要求您將任何 參數作爲序列傳遞。由於解析器的設計,(max_price) 被解釋爲使用代數分組,並且簡單地作爲max_price和 不是元組。添加一個逗號,即(max_price,)強制它創建一個 元組。

+0

謝謝pvg!該問題是由使用c.execute(插入)引起的。使用你的建議c.execute(「INSERT INTO測試(utdate)VALUES(%s)」,(今天))修復了這個問題。 – Astrodude11