#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, иначе ваши изменения никогда не попадут в базу данных.)