2017-02-17 22 views
6

Veritabanı çalışmasına yoğun önem verilerek her gün python kullanıyorum. Benim standart bir başlangıç ​​pyodbc kullanmaPython pyodbc imleci ile veritabanı imleci karşılaştırması

connection_hostname = pyodbc.connect('connection_string') 
cursor_hostname = connection_hostname.cursor() 
command_hostname = 'select * from everything_forever;' 
cursor_hostname.execute('command_hostname') 

gibi bir şey ve ben yeni bir imleç oluşturmak yerine başka bir sorgu için imleci yeniden kullanmak istiyorsanız gerekiyorsa, öyle gibi ilk sorgudan sonuç kümesini saklayabilir :

results_from_query = cursor_hostname.fetchall() 

Ve bundan sonra devam edin.

Bu yaklaşım benim için bugüne kadar iyi çalıştı.

Geçtiğimiz günlerde, işleri değiştirdim ve yukarıdaki tekniği gösterdiğimde DB'leriyle çalışmak için GUI'leri kullanan yeni iş arkadaşlarımdan bazıları. Onları kılan şey, imleç anahtar kelimesiydi. Ben imleçler DB'ler ile büyük bir hayır-hayır olduğunu anlıyorum çünkü onlar set teorisi kurulmamış mantığı gösterir, ev sahibi düşük/sıfır seviyelerinde paralelleştirme ve RBAR tipi işlemlere itme eğilimindedir, ama ben ODBC imlecine inanmıyorum '' Yukarıda bildirdiğimiz m SQL Server mühendisliği ve yönetim şapkalarımız ne zaman olduğunu düşündüğümüz bir imleç ile aynıdır.

Birisi bu ODBC imleçleri ile SQL Server tipi imleçler arasındaki farkı açıklayabilir mi (farklı olduklarını düzelterek varsayarak)?

Yanılıyorsam, lütfen beni aydınlatın ve DB'lerle nasıl daha verimli bir şekilde arabirim oluşturabileceğimi anlat.

Neden sadece onlar bağlantısı maliyet ve bu tür azaltmak için aynı bağlantı üzerinden çok imleçler izin ile bir ilgisi vardır gibi ODBC imleç yapıları olması gibi

connection_hostname.execute(command_hostname) 

hissediyorum gibi bir bağlantı doğrudan yürütmek olamaz. Üssü kapalı mı?

cevap

2

Veritabanı imleçleri, genellikle iyi bir sebeple DBA'lar tarafından iptal edilir ve güvenilmez. Genellikle bir performans sorunu kaynağıdırlar ve set tabanlı bir yaklaşım neredeyse her zaman daha iyidir. örneğin

http://www.databasejournal.com/features/mssql/article.php/3896206/What-Every-DBA-Ought-to-Know-About-SQL-Server-Cursors-and-Their-Alternatives.htm diyor ki:

"benim iş yerinde, imleçleri bizim SQL Server standartlarında yasaklandı bir imleç kullanmak amacıyla, imlecin performans işleme daha iyi olduğunu kanıtlamak zorunda. satırları başka bir şekilde. "

Aşırı basitleştirmek için, sinir arkadaşlarınıza bir python imlecinin aslında diğer dillerin bir recordset veya resultset olarak adlandırdığı ve GUI araçlarının da cursors/recordsets kullandığıyla eşanlamlı olduğunu açıklayabilirsiniz. (ama DB üzerinde bir imleç oluşturmuyor!).

difference between cursor and connection objects