2012-03-19 2 views
2
 

    >>> _cursor.execute("select * from bitter.test where id > 34") 
    1L 
    >>> _cursor.fetchall() 
    ({'priority': 1L, 'default': 0, 'id': 35L, 'name': 'chinanet'},) 
    >>> _cursor.execute("select * from bitter.test where id > 34") 
    1L 
    >>> _cursor.fetchall() 
    ({'priority': 1L, 'default': 0, 'id': 35L, 'name': 'chinanet'},) 
    >>> 

первый раз, я запустил cursor.execute и cursor.fetchall, получил правильный результат.курсор выборка неправильных записей из mysql

перед второй раз я запустить выполнение и fetchall

я вставить данные в MySQL, который ИД ИД 36, я также запустить команду фиксации в MySQL

но cursor.execute/fetchall counld только получить данные до без новых данных

+0

Как вы сделали вторую вставку? Из Python или оболочки MySQL? –

+0

из оболочки MySQL – stutiredboy

ответ

2

Я думаю, вы используете InnoDB. Это значение по умолчанию для транзакции InnoDB.

REPEATABLE READ

Это уровень изоляции по умолчанию для InnoDB. Для последовательных чтений существует важное отличие от изоляции READ COMMITTED : все согласованные чтения в рамках одной транзакции считывают моментальный снимок , установленный первым чтением. Это соглашение означает, что если вы выдаете несколько простых (неблокирующих) операторов SELECT в рамках одной и той же транзакции , эти операторы SELECT также согласуются с отношением друг к другу. См. Раздел 13.2.8.2, «Согласованные неблокирующие чтения».

Я еще не проверял, но заставляя MySQLDb начать новую транзакцию путем выдачи commit() на текущее соединение или создать новое соединение может решить эту проблему.

+2

спасибо. Ты прав. после fetchall запустить commit в порядке. или УСТАНОВИТЬ УРОВЕНЬ УСТРОЙСТВА ИЗОЛЯЦИИ УСТАНОВКИ, ОДОБРЕННО. – stutiredboy

0

Я попытался это и получили результат

import MySQLdb 


conn = MySQLdb.connect('localhost', 'test', 'test', db='test') 

cur = conn.cursor() 

result = cur.execute("select * from users where id > 7") 

print "RESULT :", result 
print "DATA :", cur.fetchall() 


cur.execute("insert into users(day) values('2012-03-15')") 
conn.commit() 

result = cur.execute("select * from users where id > 7") 

print "RESULT :", result 
print "DATA :", cur.fetchall() 
Смежные вопросы