2016-11-05 10 views
1

私のMySQLdbデータベースの日付の列&を更新しようとしています。私はdate1とtime1という名前で2つの列を持ち、どちらもTEXT型です。これは私のpythonコード日付と時刻をPythonでMySQLに更新する

import MySQLdb 
import datetime 

db = MySQLdb.connect('localhost','admin','admin','dbname') 
cur = db.cursor() 

a = datetime.datetime.strftime(datetime.date.today(),'%Y-%m-%d')) 
cur.execute('update Data set date1={0}'.format(a)) 
db.commit() 

である。しかし、このコードを実行した後、私は「2000」に設定した列の値を参照してください。

MySQLではvarchar2、date、datetimeといういくつかのデータ型を試しましたが、常に '2000'または '0000-00-00'と表示されます。

UPDATE `Data` SET `date1`='22-04-1994' 

が、私はこのエラーをGoogleで検索して、この試みた:私は、このSQLクエリを実行すると

は、直接それが正常に動作し

a = datetime.date.today() 
a = a.isoformat() 

をしかし、それは2000年

としてデータベースに示します編集: + aの代わりに{0}を使ってみました。それでも私は、MySQLバージョン5.5.51-38.2

答えて

1

文字列を連結するので、クエリが何をするかを考えます。あなたはそれを印刷することさえできます。日付を引用符で囲まないので、計算と見なされます。だから、言っている:

date1=2016-11-5 

もちろんこれは2000年ですが、最善の方法は、基礎となるシステムがあなたのためにすべてをやっているのではなく、あなたが連結してパラメータを使用することです

date1='2016-11-5' 

をしたいですそれらを正しくエスケープしようとしています。

+0

しかし、変数型はいずれかの方法で文字列です。私はstr(a)を使って完全な文字列型に変換しようとしましたが、そこにも運がありませんでした。 – user2726634

+0

@ user2726634 * variable *は文字列ですが、私が示したケースでは違いがわかりますか?あなた自身の手動の例でさえ、あなたは引用符を持っています、なぜ実際のものにはありませんか? –

+0

あなたは正しいです。私は当初理解していませんでした。しかし今、それは働いた! – user2726634

1

を使用しています2000年

として来てあなたはパラメータを使用する必要があります。しかし、そうでない場合は、日付定数を一重引用符で囲む必要があります。

cur.update('update Data set date1 = '{0}'".format(a)) 
+0

それは働いた。ありがとう! – user2726634

関連する問題