关于Flask-SQLAlchemy以前就写过一篇Flask数据库扩展Flask-SQLALchemy ,不过当时并没能搞懂具体如何使用。现在阅读了不少相关英文材料后,最终还是选择了它。
关于Flask-SQLAlchemy的介绍及管网教程等可以看上面那一片。这里主要讲一下如何使用他管理数据库。
配置数据库 1 2 3 4 5 6 7 from flask import Flask from flask.ext .sqlalchemy import SQLAlchemy app = Flask (__name__) app.config ['SQLALCHEMY_DATABASE_URI' ] = 'sqlite:////root/test/monitorDB.db' app.config ['SQLALCHEMY_TRACK_MODIFICATIONS' ] = False db = SQLAlchemy (app)
导入Flask主函数及SQLAlchemy扩展
设置数据库目录,如果用MYsql则采用
1 app.config ['SQLALCHEMY_DATABASE_URI' ] = 'msql://your-username:your-password@localhost/ufosightings'
设置数据库数据类 创建一个配置文件,如monitorDB.db,这个名字一定要起好,因为后续数据库引用操作都需要用到。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__ ) app.config['SQLALCHEMY_DATABASE_URI '] = 'sqlite: 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) password = db.Column(db .String(100) ) email = db.Column(db .String(120) , unique=True) def __init__(self , username , password , email ) : self.username = username self.password = password self.email = email def __repr__(self ) : return '<User %r>' % self.username class Piclist(db .Model) : id = db.Column(db .Integer, primary_key =True) picname = db.Column(db .String(80) ) time = db.Column(db .String(80) ) status = db.Column(db .Integer) def __init__(self , picname , time , status ) : self.picname = picname self.time = time self.status = status def __repr__(self , picname , time , status ) : reurn '<User %r>' % self.picname
我们设置了个类,第一个是User,用于存放用户信息;第二个Piclist用于存放图片信息;
用户信息包括:
创建数据库 在ssh窗口输入python
命令进入python shell,运行下面两行。
1 2 3 4 >>>>from monitorDB import db >>>>db.create_all()
先导入数据库主函数db
创建所有的表
向数据库添加用户 继续在shell中操作,也可以单独写个py文件。
1 2 3 4 5 6 7 8 >>>>from monitorDB import User >>>>admin = User ('admin' ,'password' ,'admin@admin.com' ) >>>>demo = User ('demo' ,'demo' ,'demo@example.com' ) >>>>db.session .add (admin ) >>>>db.session .add (demo) >>>>db.session .commit ()
从数据库配置中导入User表配置
创建两个User
把这两个User写入数据库
保存更改(如果不进行这句操作,那么上述添加操作就不会保存在数据库上。
查询记录 查询非常简单,只需要进行User.query.all()操作即可
如果需要查询特定用户,则User.query.filter_by(username='admin').first()
1 2 3 4 5 6 7 8 9 >>>>users = User.query.all () >>>>print usersSql[<User u'admin' >, <User u'demo' >] >>>>for user in users: ... print user.id , user.username, user.password, user.email... 1 admin password admin@admin.com2 demo demo demo@example.com
SQLAlchemy查询结果为对象,如果需要详细信息,则可以使用上述循环来获取详细信息。
删除记录 删除数据库中记录也异常简单,只需要把添加操作中的add换成delete。
1 2 3 4 >>>>db.session .delete (demo) >>>> db.session .commit ()
更新记录 官网没有直接给出更新记录的方法,差点走了弯路,其实非常简单,比如我要更新demo用户的邮箱。
1 2 3 4 >>>>demo = User.query .filter_by (username='demo' ).first () >>>>user.email = 'demo@example2.com' >>>>db.session .commit ()