2012-04-30 5 views
1

ад ребята просто прыгнул на питона и я с трудом выяснить этоМогу ли я хранить cursor.fetchone() в переменной

У меня есть 2 запросов. , query1 и query2 теперь, как я могу сказать
row = cursor.fetchone(), что я ссылаюсь на query1 и не query2

cursor = conn.cursor() 
query1 = cursor.execute("select * FROM spam") 
query2 = cursor.execute("select * FROM eggs") 
row = cursor.fetchone() 

спасибо, ребята

ответ

3

После выполнения второго запроса результаты первого исчезли. (Значение, возвращаемое execute не является полезным.) Правильным способом работы с двумя запросами одновременно является наличие двух курсоров:

cursor1 = conn.cursor() 
cursor2 = conn.cursor() 
cursor1.execute("select * FROM spam") 
cursor2.execute("select * FROM eggs") 
cursor1.fetchone() #first result from query 1 
cursor2.fetchone() #first result from query 2 
1

Это не делает. Возвращаемое значение от cursor.execute не имеет смысла. Per PEP 249:

.execute(operation[,parameters]) 

     Prepare and execute a database operation (query or 
     command)... 

     [...] 

     Return values are not defined. 
+0

на больших запросах, как вы это делаете ?? твой путь?? – tomexsans

+0

Извините, оставь это. Если вам нужно запустить сразу несколько запросов, вам нужно создать отдельный курсор для каждого из них. – duskwuff

1

Вы не можете сделать это так, как вы пытаетесь. Вместо этого сделайте что-то вроде этого:

cursor = conn.cursor() 
cursor.execute("select * FROM spam") 
results1 = cursor.fetchall() 
cursor.execute("select * FROM eggs") 

if results1 is not None and len(results1) > 0: 
    print "First row from query1: ", results1[0] 

row = cursor.fetchone() 
if row is not None: 
    print "First row from query2: ", row 
+0

да, спасибо, но это хорошо, только если ваши запросы небольшие, а что, если у вас есть тонна запросов к разным? Я думаю о подходе ООП. – tomexsans

Смежные вопросы