0

私が実行しているmysqlテーブルの問題にデータをロードするためのpythonスクリプトは次のとおりです。

Warning: Incorrect integer value: 'user_id' for column 'user_id' at row 1
  +'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',row)
Warning: Invalid TIMESTAMP value in column 'edit_time' at row 1
  +'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',row)

これは多くの警告行の 1 行にすぎません。エラーを理解しています。私の理解に基づいて、行がまだ文字列形式であるか、変換が適切に行われていないと推測します。tsvファイルから読み取った後、行の各要素をキャストすることを考えていました。

example: int(row[0])

しかし、関連するタイムスタンプ要素の MySQL タイムスタンプ タイプと一致するように正しくキャストする方法がわかりません。

#load training data
def readtsv(file_name, con):
    cur = con.cursor()
    with open('file.tsv', 'rb') as f:
        for row in csv.reader(f, delimiter='\t'):
            cur.execute('INSERT INTO mytable(user_id, article_id, revision_id, namespace, edit_time, md5, reverted, reverted_user_id, reverted_revision_id, delta, cur_size)'
                        +'VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',row)
    try:
        con.commit()
    except Exception, e:
        print 'unable to commit'
        print e
4

1 に答える 1

0

タイムスタンプの値が正しいかどうかを確認しましたか?

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

その場合、MySQL はエラーを認識しないため、警告は存在しません!

ヒントとして、insert ステートメントの文字列を出力し、「PhpMyAdmin」または他のデータベース インターフェース ツールを介して起動してみてください。

MySQL の TIMESTAMP 値は「YYYYMMDDHHMMSS」の形式であるため、今日の 2012 年 12 月 4 日 21:06:00 は、「20121204210600」と引用符で囲みます。

于 2012-12-04T20:08:05.817 に答える