flask-sqlAlchemy 创建表
2017-12-04 11:29
302 查看
# -*- coding: utf-8 -*- import os from flask import Flask from flask_sqlalchemy import SQLAlchemy # 创建flask对象 app = Flask(__name__) # 创建数据库模型 basedir = os.path.dirname(__file__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite') #配置flask的地址 db = SQLAlchemy(app) # 初始化数据库 class User(db.Model): # 创建User表 id = db.Column(db.Integer, primary_key=True) # 创建id列,并设置为主键 username = db.Column(db.String(80), unique=True) # 创建username列,设置为不可重复 email = db.Column(db.String(120), unique=True) # 创建email列,设置为不可重复 def __init__(self, username, email): # 插入新值的方法 self.username = username self.email = email def __repr__(self): # 输出的格式 return '<User %r>' % self.username
创建表
1.引入SQLAlchemy并绑定到app上
2.
class name是创建表,必须继承db.Model类
3.
db.Column用来创建列
4.
__init__用来创建插入的方法
5.
__repr__用来控制输出的格式
数据库数据类型
类型 | 描述 |
---|---|
Integer | 整形 |
String (size) | 字符串 |
Text | 文本 |
DateTime | python datetime对应的时间 |
Float | 浮点 |
Boolean | 布尔 |
PickleType | python 内存对象 |
LargeBinary | 二进制数据 |
×
unique=True唯一
×
primary_key=True声明主键,主键自动增长,如果声明两个主键则他们是复合主键
×
ForeignKey=('tablea')声明外键
×
db.relationship('tableb', backref='tablea', lazy='dynamic')声明关联关系
relationship第一个参数是在本表中添加了关联标的信息,可以在本表中直接查询
relationship中的backref参数则是在关联表中添加了本表的信息,可以在关联表中直接查询
relationship中的lazy决定了加载关联信息数据的时机,它有四个选择select(全部加载,默认值),joined(使用join语句作为父级加载关系),subquery(子查询),dynamic(不直接加载,手动加载)
一对多关系
class Person(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) addresses = db.relationship('Address', backref='person', lazy='dynamic') d6d2 # 这是在通过person查询address的时候惰性查询 #addresses = db.relationship('Address', backref=db.backref('person', lazy='dynamic'), lazy='dynamic') # 反向引用也是惰性 class Address(db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(50)) person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
class Person(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) addresses = db.relationship('Address', backref='person', lazy='dynamic')
多对多关系
tags = db.Table('tags', db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')), db.Column('page_id', db.Integer, db.ForeignKey('page.id')) ) class Page(db.Model): id = db.Column(db.Integer, primary_key=True) tags = db.relationship('Tag', secondary=tags, # 第一个参数是第一级关联 secondary是声明第二级的关联 backref=db.backref('pages', lazy='dynamic')) # class Tag(db.Model): id = db.Column(db.Integer, primary_key=True)
参考文献:
http://docs.sqlalchemy.org/en/latest/orm/relationship_api.html#sqlalchemy.orm.relationship
相关文章推荐
- flask-sqlalchemy中Datetime的创建时间、修改时间,default,server_default,onupdate
- flask-sqlalchemy使用命令创建数据库
- flask-SQLAlchemy一些使用技巧(关联关系的创建)
- Flask系列教程(二)--------------使用SQLAlchemy创建数据模型
- 使用flask-sqlalchemy创建一对多的关系表
- Flask-SQLAlchemy.........>model创建表
- Flask-SQLAlchemy创建模型与表的映射
- flask-SQLAlchemy 创建数据库
- Flask中SqlAlchemy的读写分离配置
- Flask入门之SQLAlchemy配置与数据库连接
- flask-sqlalchemy分表解决方案
- flask-sqlalchemy 实例代码
- python---flask_sqlalchemy执行sql
- Flask-SQLAlchemy
- python使用 flask_sqlalchemy连接mysql时出现ImportError: No module named MySQLdb错误
- flask-sqlalchemy分表解决方案
- flask-sqlalchemy中 backref lazy的参数实例解释和选择
- flask-sqlalchemy(1)
- Flask_SqlAlchemy 1215, 'Cannot add f oreign key constraint'
- Flask-SQLAlchemy