和其他大多数扩展一样, Flask-SQLAlchemy 也使用 pip 安装:
(venv) $ pip install flask-sqlalchemy
FLask-SQLAlchemy数据库URL
在这些 URL 中, hostname 表示 MySQL 服务所在的主机,可以是本地主机( localhost),也可以是远程服务器。 数据库服务器上可以托管多个数据库,因此 database 表示要使用的数据库名。如果数据库需要进行认证, username 和 password 表示数据库用户密令。
SQLite 数据库不需要使用服务器,因此不用指定 hostname、 username 和password。 URL 中的 database 是硬盘上文件的文件名。
程序使用的数据库 URL 必须保存到 Flask 配置对象的 SQLALCHEMY_DATABASE_URI 键中。配置对象中还有一个很有用的选项, 即 SQLALCHEMY_COMMIT_ON_TEARDOWN 键,将其设为 True时,每次请求结束后都会自动提交数据库中的变动。其他配置选项的作用请参阅 FlaskSQLAlchemy 的文档。如下展示了如何初始化及配置一个简单的 SQLite 数据库。
hello.py: 配置数据库
from flask.ext.sqlalchemy import SQLAlchemy
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)
如下为我使用SQLite的配置:
class DevelopmentConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
WTF_CSRF_ENABLED = False
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data.sqlite')
在3个子类中,SQLALCHEMY_DATABASE_URI变量都被制订了不同的值。这样程序就可以在不同的配置环境中运行,每个环境使用不同的数据库。
定义模型
模型这个术语表示程序使用的持久化实体。 在 ORM 中,模型一般是一个 Python 类,类中的属性对应数据库表中的列。Flask-SQLAlchemy 创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结构。
roles 表和 users 表的关系如下:
定义 Role 和 User 模型
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 '' % self.name
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
def __repr__(self):
return '' % self.username
虽然没有强制要求,但这两个模型都定义了 __repr()__ 方法,返回一个具有可读性的字符串表示模型,可在调试和测试时使用。
其余的类变量都是该模型的属性,被定义为 db.Column类的实例。
db.Column 类构造函数的第一个参数是数据库列和模型属性的类型。下表列出了一些可用的列类型以及在模型中使用的 Python 类型。
最常用的SQLAlchemy列类型
db.Column 中其余的参数指定属性的配置选项。下表列出了一些最常使用的SQLAlchemy列选项。
Flask-SQLAlchemy 要求每个模型都要定义主键,这一列经常命名为 id。
创建表
我们要让 Flask-SQLAlchemy 根据模型类创建数据库。方法是使用 db.create_all()函数:
(venv) $ python hello.py shell
>>> from hello import db
>>> db.create_all()
但是在命令行下操作数据库非常不方便,因为看不到数据库里面的数据到底是什么样的,尤其在删除的时候,会因为找不到对象的名字而操作失败或者误删。所以介绍一个非常好用的可视化SQLite数据库,可以在此可视化数据库上执行烦人的查找删除,非常方便。
从下面的链接可以获取SQLite可视化的数据库安装文件
http://download.csdn.net/detail/ying847782627/9499662
安装后不需要进行任何配置,直接打开创建的数据库文件,如data.sqlite文件,即可在此数据库上执行各种操作。