2015-10-31 9 views
5

Blaze'de sqlite veritabanına df = bz.Data("sqlite:///<mydatabase>) kullanarak bağlanıyorum her şey iyi çalışıyor ancak df ile etkileşimimde kullanıcı tanımlı işlevleri nasıl sağlayacağımı bilmiyorum. IP adresleri içeren bir metin olan df içinde IP adında bir sütun var. Ayrıca, metin biçiminde bir IP adresi (x) alan ve/y alt ağını döndüren bir bağlantı (x, y) işlevi de vardır. Örneğin:Sqlite arka uçlu python blaze için kullanıcı tanımlı işlev nasıl sağlanır?

out = toSubnet('1.1.1.1',24) 
out 
1.1.1.0/24 

Sevgilerine/14 alt ağlara tüm IP'leri eşleştirmek istiyorsanız, ben kullanın:

arka uç CSV olduğunda çalışır
df.IP.map(lambda x:toSubnet(x,14),'string') 

. Ama sqlite arka uç ile NotImplementedError elde ediyorum. Burada sorun ne?

cevap

6

Not: Bu tam olarak nasıl ne istediğinizi yapmanız gerektiğini söylemez, ama çalışmıyor ve olası bir sonraki adım bu SQLite ile işe almak için neden bir açıklamasını sağlamaktadır.

İçinde bulunduğunuz sorun, rasgele bir SQL veritabanına karşı keyfi Python kodunu verimli bir şekilde yürütmenin çok zor olmasıdır.

Blaze kullanıcı kodu alır ve SQLAlchemy kullanarak, bunu yapmanın bir yolu olduğunu sanmıyorum en iyi şekilde SQL'e çevirir.

neredeyse her veritabanı kullanıcı tanımlı fonksiyonlar (UDF) ile ilgili farklı bir yol var olduğundan, işin oldukça çok takip sağlayan bir API inşa etmek var:

  1. bir işlev tanımlamak için bir kullanıcı Python
  2. Bu saf Python işlevini, veritabanına özgü bir UDF'ye dönüştürün. Bir UDF ifade etmek için bir yol

    https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.create_function

    Orada şu anda değildir:

SQLite Python arayüzü SQL ifadesinde infaz edilebilir Python fonksiyonları kaydetmek için bir yol var, dedi ki Blaze ile SQL arka ucunu kullanarak, bunun bir kullanıcının temel veritabanının db API'si aracılığıyla bir işlevi kaydetmesini sağlayan yeni ifade türü olarak uygulanabilir.

+1

Bence Blaze'nin gelecekte UDF'leri desteklemesi iyi bir özellik olacaktır. Ardından kullanıcı, arka uç veri kümesinden daha soyut bir fikir verir. Yardımcı cevabınız için çok teşekkürler Phillip. – user2923891

İlgili konular