3

以下は、私が使用している私のコードです

con.execute("""
REPLACE INTO T(var1,var2,...,var300)VALUES(?,?,....?)""",(var1,var2,...,var300)

このステートメントは、 var1-var255 があれば問題なく機能しますが、それ以上になるとエラーが発生します...これまでのところ、 T を2つの異なる時間に分割できました

con.execute("""
REPLACE INTO T(var1,var2,...,var150)VALUES(?,?,....?)""",(var1,var2,...,var150)

con.execute("""
REPLACE INTO T(var151,var152,...,var300)VALUES(?,?,....?)""",(var151,var152,...,var300)

これによりエラーは発生しませんでしたが、テーブル「T」の最終値は2番目の実行ステートメントの値のみになり、すべてがvar1, var2, ... var 150nullに置き換えられました

4

2 に答える 2

2

代わりにアップデートを使用してみましたか?

MySQLのドキュメントには、次のように記載されています。「REPLACEはINSERTとまったく同じように機能しますが、テーブル内の古い行がPRIMARY KEYまたはUNIQUEインデックスの新しい行と同じ値である場合、新しい行が挿入される前に古い行が削除されます。 「」

于 2013-01-15T16:02:39.847 に答える
1

MySQL で 255 を超える列を使用し、MySQLdb とインターフェースをとって使用しても、固有の問題はないようです。

import MySQLdb
import config

connection = MySQLdb.connect(
    host = config.HOST, user = config.USER,
    passwd = config.PASS, db = 'test')
cursor = connection.cursor()

cols = ['col{i:d}'.format(i =i) for i in range(300)]
types = ['int(11)']*len(cols)
columns = ','.join('{f} {t}'.format(f = f, t = t) for f, t in zip(cols, types))

sql = '''CREATE TABLE IF NOT EXISTS test (
       id INT(11) NOT NULL AUTO_INCREMENT,
       {c},
       PRIMARY KEY (id) 
       )'''.format(c = columns)

cursor.execute(sql)

sql = '''REPLACE INTO test({c}) VALUES ({v})'''.format(
    c = ','.join(cols),
    v = ','.join(['%s']*len(cols)))

cursor.execute(sql, range(300))
result = cursor.fetchall()

これにより、行が問題なく追加されますtest.test

于 2013-01-15T16:11:24.063 に答える