2016-03-22 22 views
1

Web çerçevesi olarak pybottle ve veritabanı işleyicisi olarak dataset ile basit bir REST API'sı yazdım. Veri kümesinin veritabanına nasıl bağlandığını (açtığını ve kapattığını) ve bununla ne kadar ilgilenmem gerektiğini merak ediyorum.Python veri kümesi

aşağıdaki düşünün:

db = dataset.connect('sqlite:///database.db') 
table = db['table'] 

def some_function(): 
    # do some manipulation (eg. insert) in 'table' 

Ben (başka dosyada olduğu) web uygulamasından some_function() diyoruz ne olur? Veri kümesi, işlevin gerçekleştirilmesinden sonra veri tabanını düzgün bir şekilde açıp kapatır mı? Ya da her fonksiyon çağrısıyla yeni bir açık bağlantım var mı?

cevap

1
Python'daki her bir SQL sürücüsü Python DB API PEP0249'u izler. Gördüğüm kadarıyla SQLite için bir sürücü kullanıyorsunuz, bu yüzden aynı kuralları takip etmelisiniz. SQLAlchemy, uzun süreli bir bağlantı kurmak ve bağlantıdan kaçınmak için yerleşik bir yola sahiptir. Database nesnesini döndüren veya etkin biri yoksa bağlantıyı yeniden başlatan get_connection() yöntemini oluşturabilirsiniz.

Kitaplığın veritabanıyla iletişimi nasıl sardığını görmek için connectdocumentation ve source code10'u kontrol edin.

+0

Cevabınız için teşekkür ederiz! Ancak, yukarıdaki kod snippet'inin iyi olup olmayacağını açıkça anlamadım. Birden çok kullanıcı web uygulamasında eş zamanlı olarak "some_function()" işlevini çağırırsa ne olur? Bir veritabanı manipülasyonu diğeri bitene kadar bekler mi? Yazma işleminden sonra bağlantılar otomatik olarak kapanıyor mu? Kod snippet'imde herhangi bir şeyi değiştirmem gerekiyor mu? – wildthing

+0

@wildthing 'some_function' kodunuzda bir bağlantı açmıyor. Modül düzeyinde (dış fonksiyon) yapılır. SQLAlchemy, bir bağlantının zaten mevcut olup olmadığını denetler, true kullanılıyorsa, geçerli bağlantı başka bir tane de kurar. Her işlem aynı bağlantıyı kullanır, elle açmak/kapatmak için tavsiye edilmez, bağlantı sadece orada kalmaya devam eder. Bağlantıların nasıl ele alınacağını açıklayan SQLAlchemy belgelerine bakın. – tuned

İlgili konular