2016-03-23 9 views
0

Bir grup görüntüden algılanan görüntü lekelerini çektim ve bu verileri daha sonra kullanmak üzere bir sqlite3 veritabanına kaydediyorum.Farklı köklerdeki bir tabloya nasıl bir ekleme komutu uygularım?

Görüntüyü başarılı bir şekilde filtreleyebilir, lekeleri bulup, lekelerin görüntü çiplerini ayıklayabilir ve dosya adı, blob merkezi koordinatları ve blob çip verilerini kodumla aynı dizinde bulunan bir veritabanına kaydedebilirim .

def addEntry(filename, cp_y, cp_x, sigma, intensity, chip): 
    sqlite3.register_adapter(np.ndarray, adapt_array) 
    sqlite3.register_converter('ARRAY', convert_array) 
    con = sqlite3.connect('sources.db', detect_types = sqlite3.PARSE_DECLTYPES, timeout = 10) 
    cur = con.sursor() 
    cur.execute('''INSERT INTO sources (filename, cp_y, cp_x, sigma, intensity, chip) VALUES(?, ?, ?, ?, ?, ?), (filename, cp_y, cp_x, sigma, intensity, chip)) 
    con.commit() 
    con.close() 

Şimdi bunu bir çift yüz görüntü üzerinde uygulamak ve her bir görüntü verisi için farklı bir tablo oluşturmak istiyorum.

con = sqlite3.connect('./data/sources.db', detect_types = sqlite3.PARSE_DECLTYPES, timeout = 10) 
cur.execute('''INSERT INTO ./data/sources (filename, ... 

Ama bu hatayı OperationalError: near ".": syntax error döndürdü: Ben bu yüzden benim kod değişti benim diğer kodundan ayrı bir klasörde bu tabloları saklamak istiyorum. Ancak, yürütme komutunda ./data/ bölümünü kaldırırsam, OperationalError: no such table: sources hatasını aldım. sources tablosunu /data/ klasöründe INSERT komutuna nasıl tanımlarım?

here numaralı belgede, farklı bir dizindeki bir tabloda bir komutun yürütülmesine ilişkin bir örnek gösterilmiyor ve henüz başka örneklerle karşılaşıyorum.

cevap

0

sqlite'ın geçerli klasör yolu ile .'u değiştirmesini beklersiniz. Ama bu özelliği sağlamaz. Bunun yerine dosya/tablo önce olmasaydı, sadece tablo oluşturmak için veritabanı initilization bir tür perfom gerektiğini tam yol

import os 
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) 
DB_PATH = SCRIPT_DIR + '/data/sources.db' 
... 
con = sqlite3.connect(DB_PATH, detect_types = sqlite3.PARSE_DECLTYPES, timeout = 10) 

sağlayabilir. Ancak bu, CREATE TABLE bildirimi

+0

'dan başka bir şey olmayacaktı. Bu, sorunumu çözdü. '//'Sqlite3.connect' komutunun b/c'nin geçerli klasör yolu olarak tanınmadığı konusunda hiçbir fikrim yoktu. Ancak 'INSERT INTO kaynakları', 'kaynakları' şu anda bağlı olan dizinde olduğunu çözemedi, bu yüzden benim sorunumun nerede olduğunu varsaydım. – btathalon