Flask-SQLAlchemy简单搭建与操作

flask中一般使用flask-sqlalchemy来操作数据库,使用起来比较简单,易于操作。

pip install flask-sqlalchemy

配置选项说明

连接数据库。示例:

一个将会绑定多种数据库的字典。 更多详细信息请看官文

调试设置为true

数据库池的大小,默认值为5。

连接超时时间

自动回收连接的秒数。

控制在连接池达到最大值后可以创建的连接数。当这些额外的 连接回收到连接池后将会被断开和抛弃。

如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。

操作数据库需要先创建一个db对象,通常写在 exts.py文件里。

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

flask项目一般将数据库配置写入 configs.py文件里面,配置在创建引擎前需写好,不要在程序运行时修改配置,如下。

HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask1'
USERNAME = 'root'
PASSWORD = '123456'

DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD, host=HOST,port=PORT, db=DATABASE)

SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True

写完数据库配置后需要和app绑定, app.py文件里写flask应用的创建和蓝图的注册等等,如下:

from flask import Flask
import configs
from exts import db

app = Flask(__name__)

app.config.from_object(configs)

db.init_app(app)

数据类型说明Integer整型String字符串Text文本DateTime日期Float浮点型Boolean布尔值PickleType存储一个序列化( Pickle )后的Python对象LargeBinary巨长度二进制数据


from ext import db

“””
以下表关系:
一个用户对应多篇文章(一对多)
一篇文章对应多个标签,一个标签对应多个文章(多对多)
“””
“””
一对一关系中,需要设置relationship中的uselist=Flase,其他数据库操作一样。
一对多关系中,外键设置在多的一方中,关系(relationship)可设置在任意一方。
多对多关系中,需建立关系表,设置 secondary=关系表
“””

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(50))
    email = db.Column(db.String(50))
article_tag_table = db.Table('article_tag',
                             db.Column('article_id', db.Integer, db.ForeignKey('article.id'), primary_key=True),
                             db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True))
class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    author = db.relationship("User", backref="articles")
    tags = db.relationship("Tag", secondary=article_tag_table, backref='tags')
class Tag(db.Model):
    __tablename__ = 'tag'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50))

创建好表后需要映射到数据库中,这里需要用到 flask-migrate库。下面是启动文件 manage.py

from flask_script import Manager, Server
from app import app
from flask_migrate import Migrate, MigrateCommand
from ext import db
from first import models

manager = Manager(app)
Migrate(app=app, db=db)
manager.add_command('db', MigrateCommand)
manager.add_command('start', Server(port=8000, use_debugger=True))

if __name__ == '__main__':
    manager.run()</code>

配置好启动文件后,进入项目根目录,在命令行输入以下代码:

 <code class="  language-css">>python manage.py db init
>python manage.py db migrate
>python manage.py db upgrade

sql = 'select * from user'
result = db.session.execute(sql)

User.query.all()

User.query.get(1)

User.query.filter_by(User.username='name')

from sqlalchemy import and_
User.query.filter_by(and_(User.username =='name',User.password=='passwd'))

User.query.filter(User.id.__lt__(5))
User.query.filter(User.id.__le__(5))
User.query.filter(User.id.__gt__(5))
User.query.filter(User.id.__ge__(5))

User.query.filter(User.username.in_('A','B','C','D'))

User.query.order_by('age')

User.query.filter(age=18).offset(2).limit(3)

use = User(id,username,password)
db.session.add(use)
db.session.commit()

User.query.filter_by(User.username='name').delete()

User.query.filter_by(User.username='name').update({'password':'newdata'})

Original: https://blog.csdn.net/weixin_45722313/article/details/121049479
Author: 不胜舟-
Title: Flask-SQLAlchemy简单搭建与操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/749102/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球