MySQL Python:JSON类型在赋值时抛出错误

2024-04-29 08:44:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法使用ON DUPLICATE KEY UPDATE更新JSON类型的单元格,因为引发了一个错误。我正在使用mysql-connector-python。以下是一个最小(非)工作示例:

首先,我将我的表定义为:

cursor = db.cursor()
cursor.execute('''
    CREATE TABLE test (
        id INT AUTO_INCREMENT PRIMARY KEY,
        foo VARCHAR(255) NOT NULL UNIQUE,
        bar JSON NOT NULL
    )
''')

然后我尝试将值插入表中:

val = [
    {
        'foo': 'lorem ipsum',
        'bar': json.dumps({'a': 1}),
    },
    {
        'foo': 'dolor sit amet',
        'bar': json.dumps({'a': 2}),
    },
]
sql = '''
    INSERT INTO test
        (foo, bar)
    VALUES
        (%(foo)s, %(bar)s)
    ON DUPLICATE KEY UPDATE 
        bar = %(bar)s
'''
cursor = db.cursor()
cursor.executemany(sql, val)

这会导致错误:

ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%(bar)s' at line 6

如果我将bar = %(bar)s的行改为bar = \'%(bar)s\',代码将愉快地执行。。。至少是第一次,直到我再次运行此部分以调用ON DUPLICATE KEY UPDATE子句,这将导致另一个错误:

DataError: 3140 (22032): Invalid JSON text: "Invalid value." at position 0 in value for column 'test.bar'.

你能告诉我如何修改我的语法吗