Python + MySQLdb странная проблема

0

У меня проблема с использованием библиотеки 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()
Теги:

3 ответа

4
Лучший ответ

Включите автосообщение или внесите изменения, см.: Мои данные исчезли!

  • 0
    Спасибо, conn.commit () работал! Где сделать conn.autocommit ()?
  • 0
    Обычно сразу после создания вашего соединения ( MySQLdb.connect ). И это conn.autocommit(True)
Показать ещё 1 комментарий
1

Если вы (также) испытываете проблему с выполнением нескольких инструкций 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).

0

Когда вы выполняете инструкции, которые изменяют базу данных, вы должны зафиксировать, как уже было ответили. Если вы используете только SELECT, вам не нужно фиксировать. Будьте осторожны с autocommit, потому что, если кто-то другой работает над базой данных и у вас включен автокомплект, его/ее изменения будут совершены при выполнении вашего script, даже если он/она не закончен или не хочет совершить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню