Python, SQLAlchemy passer paramètres de connexion.exécuter
Je suis à l'aide de SQLAlchemy connexion.execute(sql) pour transformer les résultats de sélection à la gamme des cartes. Ont code suivant
def __sql_to_data(sql):
result = []
connection = engine.connect()
try:
rows = connection.execute(sql)
for row in rows:
result_row = {}
for col in row.keys():
result_row[str(col)] = str(row[col])
result.append(result_row)
finally:
connection.close()
return result
et, par exemple,
__sql_to_data(sql_get_scan_candidate)
me donne une belle structure de données (bien sûr, je suis en utilisant ce pour de petits ensembles de données).
Mais pour ajouter un paramètre à sql je suis actuellement en utilisant le format par exemple
return __sql_to_data(sql_get_profile.format(user_id))
Question
Comment modifier la procédure pour rendre possible quelque chose comme
return __sql_to_data(sql_get_profile,user_id)
OriginalL'auteur Denis | 2013-10-11
Vous devez vous connecter pour publier un commentaire.
Le tutoriel donne un assez bon exemple de cela:
Tout d'abord, prenez votre chaîne SQL et de les transmettre à sqalchemy.sql.texte(). Ce n'est pas nécessaire, mais probablement une bonne idée...
Notez que même si vous n'utilisez pas
text()
, vous ne devriez JAMAIS utiliser justesql.format(...)
. Cela conduit à un plus grand risque de L'injection SQL attaques.Ensuite, vous pouvez spécifier les arguments à l'aide de paramètres de mot clé pour la execute() de la fonction vous avez déjà été à l'aide.
Maintenant, dans votre exemple, vous avez une fonction qui encapsule l'exécution de la fonctionnalité. Donc, si vous voulez l'utiliser pour de multiples requêtes, vous aurez besoin de faire les paramètres de mesure de recevoir vos arguments. Vous pourriez faire c'est assez simple comme un dictionnaire:
values
serait un dictionnaire.Vous pouvez alors utiliser votre fonction comme ceci...À l'aide de mots-clés que vos paramètres est juste une façon de spécifier les arguments de la
execute()
fonction. Vous pouvez lire la documentation pour que pour une fonction de plusieurs manières différentes.Une autre question - comment fetchAll() et puis itterating des résultats dans une structure de données concerne pour la ligne dans les lignes en termes de consommation de mémoire?
Je ne suis pas sûr exactement ce que tu veux dire. Vous devriez peut-être créer un autre StackOverflow question, et essayer d'être plus précis sur ce que vous demandez.
text
ne permet pas de créer une liste de valeurs qui est un énorme inconvénient, et souvent il est inutilisable dans la plupart de mes cas, faire de la format la seule véritable façon.Le Format n'est jamais le chemin réel, unleas vous dire la mise en forme nécessaire des espaces réservés pour les valeurs de la liste, et SQLAlchemy même fait pour vous à l'aide de
bindparam(..., expanding=True)
. D'autre part, certains DB-API pilotes d'adapter les tableaux de la boîte à SQL.OriginalL'auteur Mark Hildreth