首页 > 解决方案 > MySQL Python 连接器 - 更新不更新

问题描述

我在 Python 中使用 MySQL,但我的更新函数没有更新行,我无法理解消息错误。

def atualizaCartelaTabela(campo,valor,jogador):
    try:
        connection = mysql.connector.connect(host='localhost',
                                     user='root',
                                     password='root',
                                     database='modular')
        cursor = connection.cursor() 
        sql = """UPDATE Cartela 
                SET %s = %s
                WHERE PONTOS = %s"""
        atualiza = (campo,valor,jogador)
        cursor.execute(sql,atualiza)
    except Error as e:
        print("Erro ao atualizar campos da tabela Cartela ->", e)
    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()

def atualizaCartelaTabela(campo,valor,jogador):
    try:
        connection = mysql.connector.connect(host='localhost',
                                     user='root',
                                     password='root',
                                     database='modular')
        cursor = connection.cursor() 
        sql = """UPDATE Cartela 
                SET %s = %s
                WHERE PONTOS = %s"""
        atualiza = (campo,valor,jogador)
        cursor.execute(sql,atualiza)
    except Error as e:
        print("Erro ao atualizar campos da tabela Cartela ->", e)
    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()

atualizaCartelaTabela('Um',2,'Jogador 1')

我得到的错误:

1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 ''Um' = 2 WHERE PONTOS = 'Jogador 1'' 附近使用正确的语法

而且,这是用于创建表(工作)的函数:

def criaTabelaCartela():
    try:
        connection = mysql.connector.connect(host='localhost',
                                     user='root',
                                     password='root',
                                     database='modular')
        cursor = connection.cursor()  
        cursor.execute("CREATE TABLE Cartela (PONTOS VARCHAR(10), Um int(2), Dois int(1), Tres int(1), Quatro int(1), Cinco int(1), Seis int(1), Full int(1), SequenciaBaixa int(1), Trinca int(1), Quadra int(1), SequenciaAlta int(1), Yahtzee int(1), PontuaçãoFinal int(1))")
        connection.commit()
    except Error as e:
        print("Erro ao criar tabela Cartela ->", e)
    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()

标签: pythonmysqlmysql-connector-python

解决方案


我猜这int - 2是这里的问题。试试这个:

做你的SQL-query这个:

sql = """
    UPDATE Cartela 
    SET %s = CAST(%s AS int)
    WHERE PONTOS = %s
"""

在你调用该方法的地方atualizaCartelaTabela使它成为:

atualizaCartelaTabela('Um','2','Jogador 1')

推荐阅读