Bir sözlükten adlandırılmış parametreleri kullanarak bir veritabanına veri eklemeye çalışıyorum. Bunun basit bir SQL deyimi ile çalışıyorum.python sqlite insert adlandırılmış parametreler veya null
SQL = "INSERT INTO status (location, arrival, departure) VALUES (:location, :arrival,:departure)"
dict = {'location': 'somewhere', 'arrival': '1000', 'departure': '1001'}
c.execute(SQL,dict)
Yerini bir yere, 1000 giriş sütununa ve 1001 çıkış sütununa ekler.
Gerçekte sahip olduğum veriler konum içerecektir, ancak varış veya kalkış içerebilir veya her ikisine birden sahip olmayabilir (bu durumda ya hiçbir şey veya NULL tabloya gidebilir). Bu durumda, ben sqlite3.ProgrammingError olsun: Aslında olacak
c.execute(SQL,defaultdict(str,dict))
işler biraz daha karışık hale getirmek için: Ben defaultdict kullanarak bu sorunu giderebilirsiniz 2.
bağlanma için bir değer arz etmedi Varış veya ayrılış ile birden fazla konum içeren sözlüklerin listesi.
({'location': 'place1', 'departure': '1000'},
{'location': 'palce2', 'arrival': '1010'},
{'location': 'place2', 'departure': '1001'})
ve ben ancak şimdi defaultdict kullanamaz c.executemany ile bu çalıştırmak mümkün istiyorum.
Listedeki her sözlükte dolaşabilir ve birçok c.execute deyimini çalıştırabilirim, ancak yürütme işlemi yapmak için daha uygun bir yöntem gibi görünüyor.
Kolaylık sağlamak için bu örneği basitleştirdim, gerçek verilerin sözlükte çok daha fazla girişi var ve bunu bir JSON metin dosyasından yapıyorum.
Bunu nasıl yapabileceğime dair herhangi bir öneriniz var mı?
Teşekkür Martin
Aşağıdaki çalışma örneği (Python 3.4.3) noktasını gösterir. Bu sorunla karşılaşan herkes için, varsayılan sözlüğün, her zaman söz konusu öğeye sahip olsa bile, her olası öğeye bir giriş içermesi gerekir. Ayrıca, executemany hattında eksik bir son yakın ayraç var. – user2497185