Python,SQL : INSERT INTO. ..使用字典进行重复更新

标签 python mysql sql pymysql

请帮帮我。我需要将字典插入表中,或者更新它(如果存在)。正如我在 stackoverflow 中发现的,有很多问题如何将 dict 插入 sql 表,但我找不到,如果字典存在,如何插入..更新。有人有想法吗?

这是我的实际代码(不起作用):

with self.connection.cursor() as cursor:
    item['added'] = unicode(int((datetime.datetime.now() - datetime.datetime(1970, 1, 1)).total_seconds()))
    columns, values = u', '.join(item.keys()), u', '.join(item.values())
    item.pop('added', None)
    item.pop('link', None)
    item['updated_at'] = datetime.datetime.now()
    exists_item = zip(item.keys(), item.values())
    update_query = u', '.join([u'{}={}'.format(k, v) for k, v in exists_item])
    query = u'INSERT INTO {} ({}) VALUES ({}) ON DUPLICATE KEY UPDATE {}'.format(
        DB_NAME, columns, values, update_query
    )
    cursor.execute(query)

我有语法错误,因为值部分没有正确转义。但是如果我使用最好的解决方案之一来插入字典(用“?”创建占位符,然后使用execute(query,values))我会遇到其他错误: 类型错误:在字符串格式化过程中并非所有参数都被转换

感谢您的帮助。

最佳答案

您的问题是 MySQL 查询中的语法不正确,但不是合并方法。事实上,INSERT INTO ... DUPLICATE KEY UPDATE ... 是合并表的方法之一。如果您检查返回print(query),则会看到错误。

您的查询:

INSERT INTO DB_NAME (added) VALUES (1455102006) ON DUPLICATE KEY UPDATE updated_at=2016-02-10 11:00:06.594000 

如何查看mysql不解析日期。日期应包含在引号中或使用 STR_TO_DATE .

正确的查询:

INSERT INTO DB_NAME (added) VALUES (1455102006) ON DUPLICATE KEY UPDATE updated_at='2016-02-10 11:00:06.594000'

为此,您可以替换以下行代码:

update_query = u', '.join([u"{}='{}'".format(k, v) for k, v in exists_item])

添加引号以更新值。

关于Python,SQL : INSERT INTO. ..使用字典进行重复更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35305946/

相关文章:

java - 无法按列顺序插入值

SQL查询从一个表中返回另一个表中不存在的行

python - 如何仅将值添加到 Numpy 2D 矩阵中的某些索引

mysql - 如何将德国日期转换为 MySQL 标准日期?

php - MySQL 查询语法错误转义字符串

mysql - 在mysql中移动现有行的id值

MYSQL - 分组前左连接的最高值

python - 从 Tkinter Entry 小部件中获取文本变量?

python - 如何更改 Airflow 网络服务器中的 dag_default_view?

python - 自动ssh进入服务器的脚本