Проблема со вставкой в базу данных MySQL из Python

#python #mysql #macos #terminal

#python #mysql #macos #терминал

Вопрос:

У меня возникли проблемы с вставкой записи в базу данных MySQL из python. Это то, что я делаю.

 def testMain2():
        conn = MySQLdb.connect(charset='utf8', host="localhost", user="root", passwd="root", db="epf")
        cursor = conn.cursor()

        tableName = "test_table"

        columnsDef = "(export_date BIGINT, storefront_id INT, genre_id INT, album_id INT, album_rank INT)"
        exStr = """CREATE TABLE %s %s""" % (tableName, columnsDef)
        cursor.execute(exStr)

        #Escape the record
        values = ["1305104402172", "12", "34", "56", "78"]                    
        values = [conn.literal(aField) for aField in values]

        stringList = "(%s)" % (", ".join(values))
        columns = "(export_date, storefront_id, genre_id, album_id, album_rank)"
        insertStmt = """INSERT INTO %s %s VALUES %s""" % (tableName, columns, stringList)
        cursor.execute(insertStmt)

        cursor.close()
        conn.close()
  

Таблица создана, однако в таблице ничего нет. Я могу успешно запустить INSERT инструкцию в терминале с теми же учетными данными.

Любые предложения о том, что я могу делать неправильно?

Комментарии:

1. опубликуйте здесь вывод переменной insertStmt

2. Простите? Вы хотите сказать, что печать insertStmt (не вывод запроса exec) не приводит к выводу?

3. если это так, то виновником может быть stringlist; можете ли вы распечатать stringlist? Не будучи питонистом, вы можете захотеть опубликовать под тегом python, это, вероятно, не составит труда для опытного пользователя python (прошу прощения, если это вы!)

4. и вуаля, @Dan, опытный пользователь python спешит на помощь

5. Я не получаю никаких выходных данных или ошибки при запуске приведенного выше кода.

Ответ №1:

Вы не зафиксировали транзакцию.

 conn.commit()
  

(Библиотека MySQLdb устанавливает autocommit значение False при подключении к MySQL. Это означает, что вам нужно вручную вызвать commit, иначе ваши изменения никогда не попадут в базу данных.)