要使用 Flask-SQLAlchemy 首先还是要通过 pip 来安装:
pip install Flask-SQLAlchemy
一个简单的例子,我们新建一个 db_app.py 文件,写入以下代码:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
接下来我们需要从交互式 Python shell (或者 ipython)导入我们创建的 db 和 User,来实现创建数据库,创建数据表,增删查改等一系列操作。
>>> from db_app import db
>>> db.create_all()
这将会在根目录创建一个 test.db 的 sqlite3 数据库文件,并创建 User 数据表。
>>> from db_app import User
>>> admin = User(username='admin', email='[email protected]')
>>> guest = User(username='guest', email='[email protected]')
>>> db.session.add(admin)
>>> db.session.add(guest)
>>> db.session.commit()
>>> User.query.all()
[<User u'admin'>, <User u'guest'>]
>>> User.query.filter_by(username='admin').first()
<User u'admin'>
可以看到我们的 User 类并不需要定义 __init__() 方法来初始化,因为继承的 db.Model 类已经隐含了这一切,如果我们需要自己的__init__() 方法,可以这样做:
class Foo(db.Model):
# ...
def __init__(**kwargs):
super(Foo, self).__init__(**kwargs)
# do custom stuff
Column 字段类型参考:
| 字段 | 含义 |
|---|---|
| Integer | 一个整数 |
| String (size) | 有长度限制的字符串 |
| Text | 一些较长的 unicode 文本 |
| DateTime | 表示为 Python datetime 对象的 时间和日期 |
| Float | 存储浮点值 |
| Boolean | 存储布尔值 |
| PickleType | 存储为一个持久化的 Python 对象 |
| LargeBinary | 存储一个任意大的二进制数据 |
其余的参数指定属性的配置选项,常用的配置选项如下:
| 字段 | 含义 |
|---|---|
| primarykey | 如果设为True,表示主键 |
| unique | 如果设为True,这列不重复 |
| index | 如果设为True,创建索引,提升查询效率 |
| nullable | 如果设为True,允许空值 |
| default | 为这列定义默认值 |