En Flacon De SQLAlchemy Constructeur
dans le Flacon de SQLAlchemy tutoriel, un constructeur pour le modèle de l'Utilisateur est défini:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
pour un tableau à deux colonnes, qui pourrait être acceptable, mais que faire si j'ai des tables avec 10+ colonnes? ne les constructeurs ont être défini à chaque fois que j'définir un nouveau modèle?
OriginalL'auteur NightOwl | 2013-12-08
Vous devez vous connecter pour publier un commentaire.
Dans la plupart des cas pas de la définition d'un constructeur dans votre modèle de classe vous donne le comportement correct.
En flacon de SQLAlchemy modèle de base de la classe (qui est aussi SQLAlchemy déclaratif de la classe de base) définit un constructeur qui ne prend
**kwargs
et magasins de tous les arguments, de sorte qu'il n'est pas vraiment nécessaire de définir un constructeur.Si vous avez besoin de définir un constructeur pour faire un modèle spécifique d'initialisation, puis procédez de la manière suivante:
En laissant la classe de base poignée de la
**kwargs
vous vous libérez de la complexité de l'initialisation de la les champs du modèle.flask_security.UserMixin
. Je pense que ce sera plus utile que moi de poster une pratiquement identique à la question.OriginalL'auteur Miguel
Je sais que c'est un peu ancien, mais peu importe, il devrait être utile pour quelqu'un d'autre avec le même problème.
Si vous rencontrez le "TypeError: init() prend exactement 1 argument (2)" - cela signifie que vous devez fournir les mots-clés lors de la création d'objets à ajouter à votre base de données comme suit:
db.session.add(User(username='myname',email='my@email',password='mypassword'))
.Il est assez fréquent de croiser ce petit problème...mais difficile à repérer.
J'espère que cette aide.
OriginalL'auteur Helen Neely
Vous pouvez écrire le constructeur toutefois vous le souhaitez, vous aurez juste besoin d'initialiser chaque champ avant d'essayer d'enregistrer l'objet dans la base de données.
Vous pouvez initialiser des paramètres dans le constructeur de cette façon.
Êtes-vous la transmission de valeurs lorsque vous construisez un objet?
Je suis en train de faire: db.session.ajouter(l'Utilisateur ("monnom", "mon@email','monmotdepasse')).
Et votre constructeur prend un nom d'utilisateur, e-mail et le mot de passe?
oui, exactement: def __init__(self, nom d'utilisateur, email, mot de passe): self.username = nom d'utilisateur de soi.email = email de soi.mot de passe = mot de passe
OriginalL'auteur FogleBird