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”中的最终值只会是第二个执行语句中的值,所有的都var1, var2, ... var 150被替换为 null

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 回答