引入一对多的数据库关系类型,以Flask-web开发中的示例为例:
#encoding:utf8
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
db = SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir,'data.sqlite')
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(64),unique=True)
users = db.relationship('User',backref='role',lazy='dynamic')
#创建和User模型的关系,给User一个role的属性,懒惰加载为动态。
def __repr__(self):
return '<Role %r>' % self.name
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(64),unique=True)
role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))
#创建以列,以roles.id的值为它的值
def __repr__(self):
return '<User %r>' % self.username
在shell中操作:
from ceshi import db
from ceshi import User,Role
db.create_all()
admin = Role(name=’Admin’)
user = Role(name=’User’)
wsj=User(username=’wsj’,role=admin)
#参数role为backref所给User模型的属性
aaa=User(username=’aaa’,role=user)
db.session.add_all([admin,user,wsj,aaa])
db.session.commit()
User.query.all()
[