2011-04-06 57 views
8

estoy usando pyodbc en Python 2.6 para conectarse a Microsoft SQL Server 2005. abro una conexión, cree un par de cursores:¿Puedo utilizar varios cursores en una conexión con pyodbc y MS SQL Server?

c1 = connection.cursor() 
c2 = connection.cursor() 

y luego ejecutar una consulta en el primer cursor.

c1.execute("select * from foo") 

Ahora ejecuta una consulta en el segundo cursor:

c2.execute("select * from bar") 

... y me da un error: "Conexión está ocupada con resultados de otro hstmt."

Después de hacer un c1.fetchall() o c1.close() entonces puedo usar c2.

Mi pregunta es: ¿por qué incluso se me permite crear varios cursores en una conexión, si solo puedo usar uno a la vez, y el mismo siempre se puede reutilizar? Y, si quiero ejecutar una consulta para cada fila de los resultados de otra consulta, así:

for x in c1.execute(...): 
    for y in c2.execute(...): 

es lo que realmente tienen que crear varias conexiones a la misma base de datos?

Respuesta

0

Esto parece ser apoyado a través de múltiples hilos: http://technet.microsoft.com/en-US/library/ms131700(v=sql.90).aspx

+0

No creo que siquiera necesite eso. Un hilo puede hacer múltiples conexiones, cada una con su propio cursor. Ciertamente, dos hilos podrían tener su propia conexión. ¿O está sugiriendo que dos hilos podrían compartir un solo objeto de conexión, pero cada uno tiene su propio cursor? – Josh

+0

@Josh: Sí, una conexión, dos cursores. A mí me funciona de todos modos. Enhebrar en realidad ni siquiera le da concurrencia en CPython debido al GIL, pero parece que permite múltiples cursores en el cliente SQL nativo. – steamer25

+0

Bueno, supongo que puedo llamar a esto una respuesta, entonces, incluso si no es lo que estaba buscando :) – Josh

-1

Mi propia práctica Nunca he conocido la necesidad de utilizar más de un cursor de base de datos. Tales problemas se utilizan para ser resueltos mediante sofisticadas consultas SQL (uniones, grupos). O bien (si puede ignorar los problemas de rendimiento) utilizando varias consultas simples.

+1

Cuando escribo scripts de migración personalizados para tomar datos de los sistemas mal diseñados, mal documentados por New sistema, necesito regularmente varios cursores abiertos en ambas bases de datos. –

Cuestiones relacionadas