您的位置:首页 > 数据库

用flask开发个人博客(18)—— 数据库模型的创建

2016-10-02 23:59 381 查看
         FLASK-SQLAlchemy是flask中一个数据库管理类框架,它封装了对大部分数据库的支持,包括关系型数据库Mysql/Postgres/SQLlite,以及Redis/MongoDB等非关系型数据库,通过SQLAlchemy,我们可以不用再关心SQL语句的使用,只需进行将数据库建模,并像管理一个类对象一样管理数据库即可.

        我们先进行数据库的建模,所谓建模就是创建一个类,那建模之前,我们先进行准备工作-引入相关SQLAlchemy库,创建SQLAlchemy对象等等.

from flask_sqlalchemy import SQLAlchemy
import os
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)
       第一行引入SQLAlchemy模块,第二行和第三行引入os模块,然后找到当前文件所在的绝对地址,第五行是在app的config中加入数据库的链接信息,我们现在链接的时SQLite数据库,我们可以通过改变app.config['SQLALCHEMY_DATABASE_URI']的值来链接不同的数据库,常用的数据库链接如下表:

      数据库引擎                                                            URL

       MySql                                            mysql://username:password@hostname/database

      Postgres                                        postgresql://username:password@hostname/database

     SQLite(Unix)                                 sqlite:////absolute/path/to/database

     SQLite(Windows)                         sqlite:////c:/absolute/path/to/database

    第四行设置自动提交,相当于在表中更新数据后,不用再手动进行commit,最后一行将目前的app对象创建SQLAlchemy实例db.

    以上就是引入了一个SQLAlchemy对象实例,下面要做的就是利用该实例对数据库进行建模.我们说过,所谓建模就是将数据库的表格映射成一个类,而类中的属性就是表中的字段,同时这个类必须从SQLAlchemy的Model进行继承.

   

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 %s>'%self.name
 class User(db.Model):
__tablename__='users'
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(64),unique=True)

def __repr__(self):
return '<User %s>'%self.name


上面两个类分别建立roles表和users表两个模型,两个模型中分别声明了id和name两个字段,同时设置了主键和唯一性约束,以后我们操作Role或者User对象就相当与操作roles表和users表.

 

Github位置:
https://github.com/HymanLiuTS/flaskTs

克隆本项目:
git clone git@github.com:HymanLiuTS/flaskTs.git
获取本文源代码:
git checkout FL18
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: