zoukankan      html  css  js  c++  java
  • 【Flask】Flask-Sqlalchemy使用笔记

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

    ### 数据库连接:
    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)`。

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

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

    ### 使用session:
    以后session也不需要使用`sessionmaker`来创建了。直接使用`db.session`就可以了。操作这个session的时候就跟之前的`sqlalchemy`的`session`是iyimoyiyang的。

    ### 查询数据:
    如果查找数据只是查找一个模型上的数据,那么可以通过`模型.query`的方式进行查找。`query`就跟之前的sqlalchemy中的query方法是一样用的。示例代码如下:

     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()
  • 相关阅读:
    调用微信扫一扫接口
    Http错误代码解释
    php goto的用法
    Yii2.0-生成二维码实例
    飞鹅WiFi打印机配置,php调用接口
    HTML5 为什么只需要写 <!DOCTYPE HTML>?
    VueJs之 v-bind
    react 组件导出
    前端代码规范
    git与github的文件推送
  • 原文地址:https://www.cnblogs.com/chen0427/p/8799470.html
Copyright © 2011-2022 走看看