Функция INSERT не выдает ошибок, все еще не обновляя таблицу БД - PullRequest
2 голосов
/ 22 июня 2019

Я создаю Mysql Wrapper для Python, главным образом, чтобы изучить все тонкости языка и т. Д. Хотя я сталкиваюсь с проблемой, которую не вижу, чтобы найти решение.

Когда я запускаю скрипт, не выдается никаких исключений, хотя моя БД не обновляется.Я играл с курсорами БД, как их закрытие, создание нового в функции и т. Д. Но результат остается прежним.

aka: 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()

1 Ответ

0 голосов
/ 22 июня 2019

В качестве строки была использована переменная 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()
...