Existe-t-il un moyen de mapper les données du formulaire à insérer dans la base de données sans définir explicitement chaque variable?

Sarach Griffin

J'ai fait un très long formulaire avec l'aide de l'alchimie de la passoire et de la déformation.

Ce formulaire contient une centaine de champs et actuellement, le seul moyen que je connaisse pour ajouter les données à la base de données une fois le formulaire soumis est de redéfinir explicitement chaque variable, puis de l'ajouter à la base de données, mais il doit y avoir un meilleur moyen.


#my schema 

class All(colander.MappingSchema):
                setup_schema(None,atr)
                atrschema =atr.__colanderalchemy__
                setup_schema(None,chemicals)
                chemicalsschema =chemicals.__colanderalchemy__
                setup_schema(None,data_aquisition)
                data_aquisitionschema =data_aquisition.__colanderalchemy__
                setup_schema(None,depositor)
                depositorschema =depositor.__colanderalchemy__
                setup_schema(None,dried_film)
                dried_filmschema =dried_film.__colanderalchemy__

form = All()
form = deform.Form(form,buttons=('submit',))

# this is how I get it to work by redefining each field but there must be a better way

if 'submit' in request.POST:

   prism_material = request.params['prism_material']
   angle_of_incidence_degrees = 
   request.params['angle_of_incidence_degrees']
   number_of_reflections = request.params['number_of_reflections']
   prism_size_mm = request.params['prism_size_mm']
   spectrometer_ID = 6

   page = atr (spectrometer_ID=spectrometer_ID,prism_size_mm=prism_size_mm,number_of_reflections=number_of_reflections,angle_of_incidence_degrees=angle_of_incidence_degrees,prism_material=prism_material)

   request.dbsession.add(page)




Would like to somehow just be able to remap all of that 'multi dictionary' that is returned back to the database?
Sergey

Donc, vous avez un dict ( request.params) et voulez passer les pars clé-valeur de ce dict à une fonction? Python a un moyen de le faire en utilisant la **kwargs syntaxe :

if 'submit' in request.POST:
   page = Page(spectrometer_ID=6,**request.params)   
   request.dbsession.add(page)

(cela fonctionne aussi car SQLAlchemy fournit un constructeur par défaut qui attribue les valeurs passées aux colonnes mappées, pas besoin de le définir manuellement)

Bien sûr, il s'agit d'une approche naïve qui ne fonctionnera que pour les cas d'utilisation les plus simples - par exemple, elle peut permettre de passer des paramètres non définis dans votre schéma, ce qui peut créer un problème de sécurité; les noms de champ dans votre schéma doivent correspondre aux noms de champ dans votre modèle SQLAlchemy; il peut ne pas fonctionner avec des listes (c'est-à-dire des valeurs multiples avec le même nom auxquelles vous pouvez accéder via request.params.get_all (nom)).

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive