0

このコードを実行して、データベースのテーブルに辞書を挿入しました。

d = {'err': '0', 'tst': '0', 'Type o': 'FTP', 'recip': 'ADMIN', 'id': '101', 'origin': 'REPORT', 'Type recip': 'SMTP', 'date': '2010-01-10 18:47:52'}

db = MySQLdb.connect("localhost","admin","password","database")
cursor = db.cursor()
cursor.execute("""INSERT INTO mytable(ID, ERR, TST, DATE, ORIGIN, TYPE_O, RECIP, TYPE_RECIP) VALUES (%(id)s, %(err)s, %(tst)s, %(date)s, %(origin)s, %(Type o)s, %(recip)s, %(Type recip)s)""", d)

db.commit()
db.close()

私のテーブルのステートメントを作成します。

CREATE TABLE mytable (
      `ID` tinyint unsigned NOT NULL,
      `ERR` tinyint NOT NULL,
      `TST` tinyint unsigned  NOT NULL,
      `DATE` datetime NOT NULL,
     `ORIGIN` varchar(30) NOT NULL,
     `TYPE_O` varchar(10) NOT NULL,
     `RECIP` varchar(30) NOT NULL,
     `TYPE_RECIP` varchar(10) NOT NULL,
     PRIMARY KEY (`ID`,`DATE`)
) ENGINE = InnoDB; 

しかし、私はエラーがあります、それは言います:

1064, "SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを確認してください...)

4

1 に答える 1

1

SQL インジェクションに注意しexecute、クエリ パラメータを挿入するために 2 番目の引数を使用します。

cursor.execute("""
    INSERT INTO
        table
        (name, age, origin, date)
    VALUES
        (%(name)s, %(age)s, %(origin)s, %(date)s)
""", d)
于 2013-05-03T11:31:59.860 に答える