【问题标题】:AttributeError 'DictCursor' object has no attribute 'update'AttributeError 'DictCursor' 对象没有属性 'update'
【发布时间】:2022-01-17 18:57:38
【问题描述】:

我正在尝试将一些 CSV 文件导入到 MySQL 数据库上的表中。 CSV 文件每天更新​​,我的目的是在 python 中使用这个程序来自动化这个过程。 这个想法是:如果信息已经存在,我想更新它。如果信息不存在,我想插入数据。

但是我遇到了这个错误:

属性错误 “DictCursor”对象没有“更新”属性

提前致谢。

csv_data = csv.reader(open('ATEG_REGIONAL_MG_DADOS_TB_ATIVIDADE.csv', encoding='ISO-8859-15'), delimiter=';') 
next(csv_data)

for row in csv_data:
    for i, l in enumerate(row):
        if row[i] == '':
            row[i] = None
        cursor.execute('SELECT * FROM atividade WHERE CD_ATIVIDADE=%s', row[0])
        if cursor.fetchall():
            cursor.update('UPDATE atividade WHERE CD_ATIVIDADE = row[0]'),
        else:
            cursor.execute('INSERT INTO atividade (CD_ATIVIDADE, NM_ATIVIDADE, ST_ATIVO, COD_USUARIO_INCLUSAO, COD_USUARIO_ALTERACAO, DAT_INCLUSAO, DAT_ALTERACAO, CO_ATIVIDADE_REZOLVE, ROWID, FLG_SAFRA, FLG_PRODUTIVO, FLG_TIPO_ATIVIDADE, FLG_INDICADOR_ISA) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', row)

# close the connection to the database. 
db.commit() 
cursor.close() 
print("Imported!")

【问题讨论】:

  • 只需向 MySQL 提供 CSV。然后将其加载到临时表(LOAD DATA)并合并到工作表(REPLACE INTO 或 INSERT .. ODKU)。这是更简单、更快速且成本更低的过程。
  • 谢谢,我会努力的! @Akina

标签: python mysql sql csv pymysql


【解决方案1】:

似乎您混淆了两个不同的库。 import MySQLdbfrom flask_mysqldb import MySQL 是两个不同的库。

由于您使用的是flask,因此添加此行app.config['MYSQL_CURSORCLASS'] = 'DictCursor',然后调用光标cursor=db.connection.cursor() 应该可以解决您的问题。

取自official git page

【讨论】:

    【解决方案2】:

    如果您使用的是 psycopg2,则不存在 cursor.update() 函数。请改用cursor.execute()


    在您的查询中,row[0] 也被视为字符串。因此,将其更改为:

    cursor.execute('UPDATE atividade WHERE CD_ATIVIDADE = ' + row[0])

    【讨论】:

    • 谢谢@Muhammed Jaseem 我试图更改为 cursor.execute 但现在错误是:ProgrammingError (1064, "You have an error in your SQL syntax; check the manual that对应于您的 MariaDB在第 1 行的 'WHERE CD_ATIVIDADE = row[0]' 附近使用正确语法的服务器版本")..我对此很陌生..我看不到 SQL 语法错误在哪里...跨度>
    • 检查我的更新答案
    • 感谢您在评论中的更新,但我遇到了同样的错误:ProgrammingError (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE CD_ATIVIDADE = '1'' at line 1")'
    • 立即检查(将字符串转换为整数)
    • 现在错误是:TypeError %d format: a number is required, not str
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 2012-12-01
    • 2021-04-19
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    相关资源
    最近更新 更多