Ceci est une ancienne révision du document !
Un modèle est une classe Python qui représente les enregistrements d'une table.
from app import db class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) def __repr__(self): return '<Role %r>' % self.name
from app import db class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) email = db.Column(db.String(200), unique=True) def __repr__(self): return '<User %r>' % self.username def hello(self): print("Hello, my name is %s." % self.name)
Une clé primaire est obligatoire pour chaque table, elle est généralement appelée id.
Nom | Type Python | |
---|---|---|
Integer | int | Regular integer, typically 32 bits |
SmallInteger | int | Short-range integer, typically 16 bits |
BigInteger | int or long | Unlimited precision integer |
Float | float | Floating-point number |
Numeric | decimal.Decimal | Fixed-point number |
String | str | Variable-length string |
Text | str | Variable-length string, optimized for large or unbounded length |
Unicode | unicode | Variable-length Unicode string |
UnicodeText | unicode | Variable-length Unicode string, optimized for large or unbounded length |
Boolean | bool | Boolean value |
Date | datetime.date | Date value |
Time | datetime.time | Time value |
DateTime | datetime.datetime | Date and time value |
Interval | datetime.timedelta | Time interval |
Enum | str | List of string values |
PickleType | Any Python object | Automatic Pickle serialization |
LargeBinary | str | Binary blob |
primary_key | If set to True, the column is the table’s primary key. |
---|---|
unique | If set to True, do not allow duplicate values for this column. |
index | If set to True, create an index for this column, so that queries are more efficient. |
nullable | If set to True, allow empty values for this column. If set to False, the column will not allow null values. |
default | Define a default value for the column. |
Entiers
class Exemple(db.Model): ... id = db.Column(db.Integer, primary_key=True) n = db.Column(db.Integer)
Chaînes
class Exemple(db.Model): ... s = db.Column(db.String(100)) t = db.Column(db.Text)
Date et heures
import datetime class Exemple(db.Model): ... d = db.Column(db.DateTime, default=datetime.datetime.now)
One Role ⇔ Many Users :
class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(200)) # ... users = db.relationship('User', backref='role') class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(200)) # ... role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
roles.id
identifie la colonne id
de la table roles
comme“clé étrangère” dans la relation.
backref
ajoute un attribut role
au modèle User.>>> r = Role(nom='Manager') >>> u = User(nom='Marc', role=r) >>> u.nom 'Marc' >>> u.role.nom 'Manager'
Flask shell permet d'interagir avec l'application, et notamment de manipuler les modèles, modifier des données, etc.
$ flask shell >>> from app import db >>> from app.models import User # création d'une instance >>> u = User() >>> u.name = 'Marc' >>> u.email = 'marc@email.com' # ajout dans la db >>> db.session.add(u) >>> db.session.commit() # modification >>> u.name = 'Marcounet' >>> db.session.commit()
Après avoir créé/modifié les modèles, il faut appliquer les changements dans la base de données (ajout de tables, création de champs, etc.)
Ne rien faire manuellement, mais utiliser les Migrations.