У меня проблема с использованием библиотеки MySQLdb. Я пытаюсь вставить значения в таблицу, но MySQL не показывает их. Что более странно, первичный ключ меняется, когда я вручную вставляю значения с помощью командной строки.
Чтобы показать вам пример:
'786', '2011-02-16 14:52:38', NULL
'787', '2011-02-16 14:52:52', NULL
'792', '2011-02-16 14:53:25', NULL
Я вручную вставляю какое-то значение в 786 и 787 (первичный ключ), затем запускаю мой python script, останавливая его после того, как получил 4 значения. Я набираю 'SELECT * из таблицы', и я не вижу никаких изменений. Затем я вставляю другое значение (вручную) и показывает новый первичный ключ "792". Похоже, что python script удаляет вещи...
Здесь мой код python:
try:
conn = MySQLdb.connect(host = "127.0.0.1",
user = "root",
passwd = "eBao1234",
db = "test")
cursor = conn.cursor()
print 'data base connected'
try:
while 1:
localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
i = i + 1
aRead = ser.readline()
aSplit = aRead.split(",")
if aSplit[0] == "t":
print str(i) + ", " + localtime + ", " + aSplit[1]
tableName = "sampdb"
dbquery = "INSERT INTO %s (timestamp, tempReading) VALUES (NOW(), %s);" % (tableName, aSplit[1])
cursor.execute(dbquery)
except KeyboardInterrupt:
ser.close()
#csvResults.close()
#cursor.close()
#conn.close()
print "\nInterrupted."
raw_input("Press enter to exit.")
except Exception,e:
print str(e)
print 'error connecting to database'
cursor.close()
conn.close()
Включите автосообщение или внесите изменения, см.: Мои данные исчезли!
Если вы (также) испытываете проблему с выполнением нескольких инструкций INSERT, которые не сохраняются в базе данных, посмотрите на мой ответ на pymysql callproc(), что влияет на последующие select
Однако немного позже я узнал, что моя проблема в том, что exit() был слишком быстро выведен. Итак, я добавил time.sleep(3) перед вызовом exit() - он сработает!
import time
time.sleep(3)
cur.close()
conn.close()
time.sleep(3)
exit()
Update: Опять же, история еще не закончилась... Я испытал подобную ошибку позже в моем script при выборе из базы данных и не получая никаких результатов. Это не похоже на указанное поведение time.sleep(x).
Когда вы выполняете инструкции, которые изменяют базу данных, вы должны зафиксировать, как уже было ответили. Если вы используете только SELECT, вам не нужно фиксировать. Будьте осторожны с autocommit, потому что, если кто-то другой работает над базой данных и у вас включен автокомплект, его/ее изменения будут совершены при выполнении вашего script, даже если он/она не закончен или не хочет совершить.
MySQLdb.connect
). И этоconn.autocommit(True)