Veritabanından almak için bir dizi ids listesi var. Ben python ve psycopg2 kullanıyorum ve benim sorunum, bu kimlikleri SQL'e etkili bir şekilde nasıl ileteceğinizdir? Demek istediğim, bu listenin uzunluğunu bilirsem oldukça kolaydır, çünkü gerektiğinde sorgu dizisine her zaman el ile veya otomatik olarak çok fazla "% s" ifadesi ekleyebilirim, fakat burada ne kadar ihtiyacım olduğunu bilmiyorum . Sql "id IN (id1, id2, ...)" deyimini kullanarak bu satırları seçmem gerekiyor. Listenin uzunluğunu kontrol etmenin ve "% s" dizisini sorgu dizisine birleştirmenin mümkün olduğunu biliyorum, ancak bunun çok yavaş ve çirkin olacağından korkuyorum. Herkesin nasıl çözeceği konusunda bir fikri var mı? Ve lütfen neden "IN" ifadesiyle yapmam gerektiğini sorma - sınıf ödevimin bir parçası olan bir ölçüt. Şimdiden teşekkürler!Parametreleri psycopg2'de SQL'e geçirme
cevap
Python küpe psycopg2 sql listelere dönüştürülür:
cur.mogrify("SELECT * FROM table WHERE column IN %s;", ((1,2,3),))
çıktılayacaktır Python yeni gelenler için
'SELECT * FROM table WHERE column IN (1,2,3);'
: Burada bir demet değil, bir liste kullanmak maalesef önemlidir. Ikinci örnek:
cur.mogrify("SELECT * FROM table WHERE column IN %s;",
tuple([row[0] for for in rows]))
Teşekkür ederim, bunu fark etmedim. Çözümünüzle ilgili tek sorun, bu tuple'da virgül unuttuğunuz. –
Teşekkürler - düzeltildi – philofinfinitejest
Not: Python LISTS Postgres ARRAY türlerine dönüştürülecektir, bu yüzden cursor.execute (...) argümanlarında sık sık (tuple (SOME_LIST) gibi) bir şey yapmam gerektiğini buldum. Listenin tuple'ını() tek bir öğe literal tuple nasıl sardığımızı not edin, bu nedenle bu örnekte gösterildiği gibi bir tuple kopyasına sahibiz. –
- 1. Parametreleri XMLHttpRequest nesnesine geçirme
- 2. Parametreleri MVC'ye geçirme Ajax.ActionLink
- 3. Parametreleri MVVM Komutu'na geçirme
- 4. Parametreleri GET isteğine geçirme
- 5. Parametreleri CouchDb'deki işlevlere geçirme
- 6. Android: Parametreleri AndroidManifest.xml etkinliğinden geçirme
- 7. Amaç-C parametreleri olarak geçirme
- 8. Goblen - Parametreleri tml'den geçirerek geçirme
- 9. İlk parametreleri bir ExtJS 4 uygulamasına geçirme
- 10. Parametreleri C'den GNU'ya geçirme 64bit'de montaj işlevi
- 11. Parametreleri doğrudan pbs komut dosyasına geçirme
- 12. İç içe geçmiş iş akışına geçirme parametreleri
- 13. Parametreleri geçirilen görevde powershell komut dosyasına geçirme
- 14. Parametreleri jsp'den Spring Controller yöntemine geçirme
- 15. Bir JSON web hizmetine geçirme parametreleri Objective C
- 16. URL parametrelerini iframe'e geçirme
- 17. sql ile bulmak sql sorgu parametreleri
- 18. Geçirme MySQL
- 19. AsyncTask doInBackground parametreleri vs yapıcı parametreleri
- 20. eventEmitter parametreleri ve farklı parametreleri olan emitörler
- 21. Eğik 2 pas parametreleri DI istisna
- 22. `implicit` parametreleri
- 23. Modeli parametreleri
- 24. gerçekleştirmek: parametreleri
- 25. Parametreleri OPENQUERY
- 26. Örnek Django formset'e geçirme
- 27. Dlang'da işlev işaretçisini geçirme
- 28. Geçirme Chrome Uzantısı Firefox
- 29. Verileri transcluded öğeye geçirme
- 30. Nesne değerlerini yöntemlere geçirme
SQL yanıtına karşı mısınız? Dinamik SQL kullanarak, herhangi bir uzunlukta bir dize verebilir ve SQL'in doğru okumasını sağlayabilirsiniz. – Twelfth