【Flask】Flask-Sqlalchemy使用笔记

### 安装:
```shell
pip install flask-sqlalchemy
```mysql

### 数据库链接:
1. 跟sqlalchemy同样,定义好数据库链接字符串DB_URI。
2. 将这个定义好的数据库链接字符串DB_URI,经过`SQLALCHEMY_DATABASE_URI`这个键放到`app.config`中。示例代码:`app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI`.
3. 使用`flask_sqlalchemy.SQLAlchemy`这个类定义一个对象,并将`app`传入进去。示例代码:`db = SQLAlchemy(app)`。sql

### 建立ORM模型:
1. 仍是跟使用sqlalchemy同样,定义模型。如今再也不是须要使用`delarative_base`来建立一个基类。而是使用`db.Model`来做为基类。
2. 在模型类中,`Column`、`String`、`Integer`以及`relationship`等,都不须要导入了,直接使用`db`下面相应的属性名就能够了。
3. 在定义模型的时候,能够不写`__tablename__`,那么`flask_sqlalchemy`会默认使用当前的模型的名字转换成小写来做为表的名字,而且若是这个模型的名字使用了多个单词而且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行链接。**虽然flask_sqlalchemy给咱们提供了这个特性,可是不推荐使用。由于明言胜于暗喻**shell

### 将ORM模型映射到数据库:
1. db.drop_all()
2. db.create_all()数据库

### 使用session:
之后session也不须要使用`sessionmaker`来建立了。直接使用`db.session`就能够了。操做这个session的时候就跟以前的`sqlalchemy`的`session`是iyimoyiyang的。flask

### 查询数据:
若是查找数据只是查找一个模型上的数据,那么能够经过`模型.query`的方式进行查找。`query`就跟以前的sqlalchemy中的query方法是同样用的。示例代码以下:session

 1 # coding:utf-8
 2 
 3 from flask import Flask
 4 from flask_sqlalchemy import SQLAlchemy
 5 
 6 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1/sqlalchemy_first?charset=utf8'
 7 
 8 app = Flask(__name__)
 9 app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI
10 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
11 db = SQLAlchemy(app)
12 
13 
14 # model
15 class User(db.Model):
16     __tablename__ = 'user'
17     id = db.Column(db.Integer, primary_key=True, autoincrement=True)
18     username = db.Column(db.String(50), nullable=False)
19 
20     def __repr__(self):
21         return "User<{}>".format(self.username)
22 
23 
24 class Article(db.Model):
25     __tablename__ = 'article'
26     id = db.Column(db.Integer, primary_key=True, autoincrement=True)
27     title = db.Column(db.String(50), nullable=False)
28     uid = db.Column(db.Integer, db.ForeignKey('user.id'))
29     author = db.relationship("User", backref='articles')
30 
31     def __repr__(self):
32         return "Article<{}>".format(self.title)
33 
34 
35 @app.route('/')
36 def hello_world():
37     return 'Hello World!'
38 
39 
40 if __name__ == '__main__':
41 
42     # 添加数据
43     user = User(username='saber')
44     article = Article(title='title1')
45     article.author = user
46     db.session.add(article)
47     db.session.commit()
48 
49     # 查询
50     users = User.query.first()
51     print users
52 
53     # 修改
54     user = User.query.filter(User.username=='saber').first()
55     user.username='saber007'
56     db.session.commit()
57 
58     # 删除
59     user = User.query.filter(User.username == 'saber007').first()
60     db.session.delete(user)
61     db.session.commit()
62     app.run()
相关文章
相关标签/搜索