python - INSERT 函数没有抛出错误,仍然没有更新数据库表

标签 python mysql mysql-python

我正在为 Python 创建一个 Mysql 包装器,主要是为了学习语言的来龙去脉等。虽然我偶然发现了一个问题,但我找不到解决方案。

当我运行脚本时,没有抛出任何异常,尽管我的数据库没有得到更新。我玩弄了 DB Cursors,比如关闭它们,在函数中创建新的游标等。但结果保持不变。

又名:cursor.rowcount -1

连接到数据库:

class magicDB:
    myDB = None
    DB_Cursor = None

    def __init__(self,host, user, passwd, DB=None):
        global myDB
        self.host = host
        self.user = user
        self.DB = DB

        if self.DB is None:
            myDB = mysql.connector.connect(
                host= host,
                user= user,
                passwd= passwd)
            #DB_Cursor = myDB.cursor()
        else:
            myDB = mysql.connector.connect(
                host= host,
                user= user,
                passwd= passwd,
                database=DB)
            #DB_Cursor = myDB.cursor()
    def insert(self,table_name, params):


            fields = ''
            values = ''
            placeholders = ''

            query = '"INSERT INTO {} '. format(table_name)
            for key in params:
                fields = fields + str(key) + ', '
                values = values + str(params[key]) + ', '
                placeholders = placeholders + str('%s, ')

            fields = fields[:-2]
            values = values[:-2]
            placeholders = placeholders[:-2]
            query = query + '(' + fields + ')' + ' VALUES ' + '(' + placeholders + ')"'
            print(query)
            try:
                Cursor = myDB.cursor()
                Cursor.execute(operation=query, params=values, multi=True)
                myDB.commit()
                print(Cursor.rowcount, ' Record inserted')
            except mysql.connector.Error as error:
                print (error)
            finally:    
                Cursor.close()

这是调用函数的主要模块:

from db_magic import magicDB

conn = magicDB(host='localhost', user='***', passwd='****', DB='testing')
print(conn)


# print(conn.DB_create('testing2'))


conn.insert(table_name= 'users', params={
    'user_name': 'John Doe',
    'email' : 'test@123.com',
    'password': 'test'

} )
print(conn.Close_conn())

我试图了解我在这里做错了什么,因为没有抛出异常。

解决方案:

将值更改为列表而不是字符串。

def insert(self,table_name, params):      
        fields = ''
        values = [] # changed to List instead of String
        placeholders = ''

        query = 'INSERT INTO {} '. format(table_name)
        for key in params:
            fields = fields + str(key) + ', '
            values.append(params[key])
            placeholders = placeholders + str('%s, ')

        fields = fields[:-2]
        placeholders = placeholders[:-2]
        query = query + '(' + fields + ')' + ' VALUES ' + '(' + placeholders + ')'
        print(query)
        print(values)
        try:
            Cursor = myDB.cursor()
            Cursor.execute(operation=query, params=values, multi=False)
            myDB.commit()
            print(Cursor.rowcount, ' Record inserted')
        except mysql.connector.Error as error:
            print(error)
        except:
            print ('Some errors')
        finally:    
            Cursor.close()

最佳答案

Values 变量用作字符串,MYSQL - 连接器不会循环访问它。为了解决这个问题,我将值变量更改为列表:

def insert(self,table_name, params):      
        fields = ''
        values = [] # changed to List instead of String
        placeholders = ''

        query = 'INSERT INTO {} '. format(table_name)
        for key in params:
            fields = fields + str(key) + ', '
            values.append(params[key])
            placeholders = placeholders + str('%s, ')

        fields = fields[:-2]
        placeholders = placeholders[:-2]
        query = query + '(' + fields + ')' + ' VALUES ' + '(' + placeholders + ')'
        print(query)
        print(values)
        try:
            Cursor = myDB.cursor()
            Cursor.execute(operation=query, params=values, multi=False)
            myDB.commit()
            print(Cursor.rowcount, ' Record inserted')
        except mysql.connector.Error as error:
            print(error)
        except:
            print ('Some errors')
        finally:    
            Cursor.close()

关于python - INSERT 函数没有抛出错误,仍然没有更新数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714407/

相关文章:

mysql-python - Python - SSH 隧道设置和 MySQL 数据库访问

Python:读取时间为小时、分钟和秒的文本文件;和角度,弧分和弧秒

php - MySQL - 每个 ID 的 INSERT 或 JOIN 表行

php - 需要向 MySQL 查询添加一个 PHP 对象

mysql - 根据具有多个记录的表中另一列的不同值添加值

python - 生产中的 django 和 mysql 设置

python - MySQL 数据使用谷歌云 SQL 和 SQLAlchemy 进行缓存

python - Pygame 窗口在退出时卡住

python - 我应该如何将文本/纯数据传递给 python 的 requests.post?

python - 获取并绘制 pandas 数据框中的唯一值计数