The tutorial gibi olası bir şey yapmak için prosedür nasıl değiştirilir
return __sql_to_data(sql_get_profile.format(user_id))
Soru bunun için oldukça iyi bir örnek verir:
>>> from sqlalchemy.sql import text
>>> s = text(
... "SELECT users.fullname || ', ' || addresses.email_address AS title "
... "FROM users, addresses "
... "WHERE users.id = addresses.user_id "
... "AND users.name BETWEEN :x AND :y "
... "AND (addresses.email_address LIKE :e1 "
... "OR addresses.email_address LIKE :e2)")
SQL>>> conn.execute(s, x='m', y='z', e1='%@aol.com', e2='%@msn.com').fetchall()
[(u'Wendy Williams, [email protected]',)]
İlk önce SQL dize almak ve sqalchemy.sql.text()'a ilet. Bu
avantajları metin() düz dize üzerinde sağlar ... gerekli ama muhtemelen iyi bir fikir değil, başı deyimi yürütme seçenekleri bağlama parametreleri için arka uç nötr desteğidir yanı olarak SQLAlchemy tipi yapıların, tam olarak belirtilen bir deyimi yürütürken rol oynamalarına izin veren parametre ve sonuç sütun tanımlama davranışı. Eğer text()
kullanmadıysanız bile, sadece sql.format(...)
kullanmak ASLA
Not. Bu, SQL injection saldırısı riskini artırır.
Daha önce, kullanmakta olduğunuz execute() işlevine anahtar sözcük parametrelerini kullanarak gerçek bağımsız değişkenleri belirtebilirsiniz.
Şimdi, örneğinizde, yürütme işlevini saran bir işleviniz var. Yani, bunu birden fazla sorgu için kullanmak isterseniz, parametrelerinizi argümanlarınızı alabilmeniz gerekir. senin parametre olarak anahtar kelimeleri kullanma
sql = 'SELECT ...'
data = { 'user_id' : 3 }
results = _sql_to_data(sql, data)
sadece bir yoludur ...
def _sql_to_data(sql, values):
...
conn.execute(sql, values)
values
bir dictionary.You sonra bu gibi işlevini kullanabilirsiniz olacaktır: Bir sözlük olarak bu oldukça basit yapabilirdi argümanların execute()
fonksiyonuna belirtilmesi. Bu işlev için the documentation'u birkaç farklı yoldan okuyabilirsiniz.
Teşekkür ederim, kötüyüm, nedense doktora bulamadım. Benim tek bir mazeret SQLAlchemy doc biraz ORM üzerinde vurgu ile parçalanmış. – Denis
Bir soru daha - fetchAll() nasıl yapılır ve sonuçta yapılan veri yapısı, bellek tüketimi açısından satırlardaki satırlar ile ilgilidir. – Denis
@Denis: Tam olarak ne demek istediğinden emin değilim. Belki başka bir StackOverflow sorusu oluşturmalı ve ne sorduğun hakkında daha spesifik olmalısın. –