2014-03-03 29 views
1

我想在python中使用mysql函數日期時間函數str_to_date。我需要一個關於如何在python中使用mysql函數的指南。 Raw_Data是表格的名稱。在Python中使用MySQL函數

sql = """INSERT INTO RawData(DateTime) VALUES ('%s')""" % (STR_TO_DATE(date_time,'%d/%b/%Y:%T'))  
cursor.execute(sql) 

錯誤:

NameError: name 'STR_TO_DATE' is not defined 
+1

這是一個mysql函數。它在你的* python *代碼中做了什麼?你不能那樣做。 –

+0

不要對呼叫發生在哪裏感到困惑。如果您調用MySQL函數,它將在數據庫服務器上運行,而不是在Python中運行。你可以像Python中的存儲過程那樣調用它,但它會在MySQL上執行。 – duffymo

+0

使用它從字符串中提取日期時間對象。我認爲它應該返回datetime對象 – user2547084

回答

1

改變您的查詢:
UPDATE:

sql = """INSERT INTO RawData(DateTime) VALUES (STR_TO_DATE(%s, '%%d/%%b/%%Y:%%T'))"""% (date_time) 
+1

甚至可以將日期格式放入SQL字符串:'sql =「」「INSERT INTO RawData(日期時間)VALUES(STR_TO_DATE(%s,'%% d/%% b/%% Y:%% T'))」「」%(date_time,)' – Don

+2

'@唐',是的,你是對的。我編輯了答案。 – omid

+0

它爲我工作。我在參數中使用了mysql的str_to_date函數。出錯了。謝謝! – user2547084

2

第一件事,第一:從不但切勿使用字符串格式化一個字符串,然後通過一個SQL的字符串。

你可以在這裏看到完整的解釋http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters(雖然這是PostgreSQL這是DB編程的基本規則)。 現在想你想要做的是傳遞MYSQL函數作爲參數傳遞給查詢 你可以看到更多關於如何做到這一點在這篇文章:當你綁定的日期http://mysql-python.sourceforge.net/MySQLdb.html#cursor-objects 現在:

Python MySQL Parameterized Queries 這裏你不需要將它轉換成一個字符串,然後再回來。 所以這段代碼會確定:

import datetime 
d = datetime.datetime.now() 
sql = """ INSERT INTO RawData(DateTime) Values ('%s')""" 
cursor.execute(sql, (d,)) 

現在,如果你想使用的功能在你的代碼的功能必須是你的SQL的一部分,不是一個參數(或字符串參數,它是壞的傳遞)。這pesudo代碼應該是這樣的(我還沒有跑過它):

sql = """INSERT INTO RawData(DateTime) VALUES (STR_TO_DATE('%s',%%d/%%b/%%Y:%%T'))""" 
cursor.execute(sql, (d,)) 
+1

非常好的解釋。參數應該始終作爲參數傳遞! – Don

+0

請注意:execute的第二個參數應該是一個序列(元組或列表):所以它應該是'cursor.execute(sql,(d,))'或'cursor.execute(sql,[d] )' - http://initd.org/psycopg/docs/usage.html#passing-parameters-to-sql-queries – Don

+0

正確:)我已編輯它。 – asafm