Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >盘点Flask与数据库的交互插件--Flask-Sqlalchemy

盘点Flask与数据库的交互插件--Flask-Sqlalchemy

作者头像
Python进阶者
发布于 2021-08-20 03:28:57
发布于 2021-08-20 03:28:57
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是Python进阶者。

前言

在我们做web开发的时候,经常需要用到与数据库交互,因为我们的数据通常都是保存在数据库中的,如果有人需要访问,就必须与数据库访问,所以今天我们介绍一个Flask中与数据库交互的插件---Flask-Sqlalchemy。

一、安装并导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install flask-sqlalchemy

from flask_sqlalchemy import SQLAlchemy
import os
import pymysql as p
from flask import Flask

二、基本用法

今天我们要了解的是Mysql数据库,所以这里重点介绍连接Mysql数据库的方法。

1.连接数据库

1).写在配置文件中然后读取

首先创建一个配置文件"config.py",内容为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db_type='mysql'
db_conn='pymysql'
host='127.0.0.1'
username='root'
password='123456'
port='3306'
db_name='people'
SQLALCHEMY_DATABASE_URI='{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(db_type,db_conn,username,password,host,port,db_name)
SQLALCHEMY_COMMIT_ON_TEARDOWN=False
SQLALCHEMY_TRACK_MODIFICATIONS=True

然后在应用中导入配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import config
app=Flask(__name__)
app.config.from_object(config) # 连接数据库配置文件
db=SQLAlchemy(app)
db.create_all()  # 创建所有的数据库
2).直接写在应用中读取
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app=Flask(__name__)
p.install_as_MySQLdb()   # mysql连接器,因为不支持py3版本,所以必须加上这行
app.config['SECRET_KEY']=os.urandom(50)
app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:123456@127.0.0.1:3306/people'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True   # 每次请求结束后都会自动提交数据库中的变动
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True  # 动态追踪修改设置,如未设置只会提示警告
db = SQLAlchemy(app)

还有许多其它的配置参数,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQLALCHEMY_NATIVE_UNICODE    # 可以用于显式禁用原生 unicode 支持
SQLALCHEMY_POOL_SIZE         # 数据库连接池的大小,默认是引擎默认值(5SQLALCHEMY_POOL_TIMEOUT      # 设定连接池的连接超时时间,默认是 10
SQLALCHEMY_POOL_RECYCLE      # 多少秒后自动回收连接,mysql默认为2小时
SQLALCHEMY_RECORD_QUERIES    # 可以用于显式地禁用或启用查询记录
SQLALCHEMY_ECHO              # 为Ture时用于调试,显示错误信息
SQLALCHEMY_BINDS             # 一个映射 binds 到连接 URI 的字典
3).使用独特的创建引擎
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import create_engine
# echo参数为True时,会显示每条执行的SQL语句,为False时关闭
engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/people',echo=True)
engine.connect()

这样我们就算与People数据库建立连接了,接下来我们来建立一张表。

4).创建连接多个数据库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
app.config['SQLALCHEMY_BINDS']={
'users': "mysql+pymysql://root:123456@127.0.0.1:3306/user",
    'admin': 'sqlite://C:/Users/Administrator/Desktop/admin',
    'buy':   'postgresql://root:123321@127.0.0.1/buy'
}

然后引用表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.create_all(bind=['users'])
db.create_all(bind='admin')

指定Users数据库中的表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
__bind_key__ = 'users'
bind key 内部存储在表的 info 字典中  即:info={'bind_key': 'users'}

2.建立数据表并插入值

1).继承"db.Model"类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import config
app=Flask(__name__)
app.config.from_object(config) # 添加配置文件
db=SQLAlchemy(app)
class User(db.Model):
    __tablename__='users'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True) # 整数类型的自增主键
    username=db.Column(db.String(100),nullable=False)  # 字符类型不为空
    password=db.Column(db.String(100),nullable=False)  # 字符类型不为空

    def __init__(self,username,password):
        self.username=username
        self.password=password

    def __repr__(self):
        # 打印当前类名和它的实例化后的值
        return ' %s is %r' %(self.__class__.__name__,self.username) 
    
    
# 请求钩子,第一次请求之前执行
@app.before_first_request
def create_table(): 
    db.drop_all()  # 删除所有表
    db.create_all() # 创建新的表

    
@app.route('/')
def create():
    use1= User('hwhrr', '123321')  
    use2= User('hwzjj', '123456')
    use3= User('hwzzz', '654321')
    db.session.add_all([use1,use2,use3]) # 添加所有的用户,添加一个用户去掉_all后面加一个元祖即可 
    db.session.commit()  # 提交数据
    return use1.__repr__() # 返回用户1的值

if __name__ == '__main__':  
    app.run(debug=True)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Column        参数列表  
name          列名
type_         类型
*args         列表参数
Constraint(约束), ForeignKey(外键), ColumnDefault(默认), Sequenceobjects(序列)定义
key         列名的别名
primary_key 如果为True,则是主键
nullable    如果是True,则可以为null
default     设置默认值,默认是None
index       是否是索引,默认是True
unique      是否唯一键,默认是False
onupdate    指定一个更新时候的值
autoincrement 设置为整型自动增长
quote         如果列明是关键字,则强制转义,默认False
2).利用原始引擎来创建会话(稍微复杂点)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
app=Flask(__name__)
Base = declarative_base()
# 创建连接数据库的引擎并且打开回显
engine = create_engine("mysql+pymysql://root:123456@localhost/people",echo=True)
Session = sessionmaker(bind=engine) # 创建会话标记
class User(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True,autoincrement=True)
    username = Column(String(100),nullable=False)
    password = Column(String(100),nullable=False)
    def __init__(self, username,password):
        self.username = username
        self.password=password
    def __repr__(self):
        return ' %s is %r' %(self.__class__.__name__,self.username)
    
@app.before_first_request
def create_table():
    Base.metadata.drop_all(engine) # 删除所有数据库
    Base.metadata.create_all(engine) # 创建所有数据库
    
@app.route('/')
def index():
    user= User("hwhrr","123321")
    session = Session()   # 创建会话
    session.add(user)  # 添加内容
    session.commit()  # 提交
    return user.__repr__()

if __name__ == '__main__':  
    app.run(debug=True)

3.数据库之间的关系

1). 一对一

只需让两张表都在同等的位置上,属于双向关系。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class father(db.Model):
    __tablename__='Father'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    #主要是要在一个表上设置uselist 然后设置back_populates的值为其它表的映射返回值
    son_fa=db.relationship('son',uselist=False, back_populates='fa_son') 
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '%s is %r'%(self.__class__.__name__,self.name)


class son(db.Model):
    __tablename__='Son'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    # 这里无需设置uselist
    fa_son=db.relationship('father',back_populates='son_fa')
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '%s is %r'%(self.__class__.__name__,self.name)
2).一对多

我们需要建立一个主表和一个子表,分别命名为“father”和‘son’,然后需要建立外键和反射来互相引用建立一种关系,我们来看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class father(db.Model):
    __tablename__='Father'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    # 表示另一端是son这个模型,backref可替代Father.id访问father模型
    son_fa=db.relationship('son',backref='fa',lazy='dynamic')
    # lazy表示加载方式:
    # dynamic:动态加载,只有用到了才加载 只可以用在一对多和多对多关系中
    # subquery:全部加载
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '%s is %r'%(self.__class__.__name__,self.name)


class son(db.Model):
    __tablename__='Son'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    f_id=db.Column(db.Integer,db.ForeignKey('Father.id')) # 建立外键关联,指明表名和字段
    def __init__(self,name,age):
        self.name=name
        self.age=age        
    def __repr__(self):
        return '%s is %r'%(self._class__.__name__,self.name)

@app.route('/')
def create():
    use1= father('hw', 45)
    use2= son('hyy', 20)
    db.session.add_all([use1,use2])
    db.session.commit()
    return use1.__repr__()+'\n'+use2.__repr__()
3).多对一

就是将反射应用在子表上,与父表同时进行关联。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class father(db.Model):
    __tablename__='Father'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    # 表示另一端是son这个模型
    son_fa=db.relationship('son', back_populates="fath") 
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '%s is %r'%(self.__class__.__name__,self.name)


class son(db.Model):
    __tablename__='Son'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    f_id=db.Column(db.Integer,db.ForeignKey('Father.id')) # 建立外键关联
    # 表示另一端是father这个模型
    fa_son=db.relationship('father',back_populates="so") 
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '%s is %r'%(self.__class__.__name__,self.name)
4).多对多

设置一个关联表来对两个表同时进行管理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 设置关联表
gl=db.Table('glb',
    db.Column('id',db.Integer,primary_key=True,autoincrement=True),
    db.Column('son_id',db.Integer,db.ForeignKey('Son.id')),
    db.Column('father_id',db.Integer,db.ForeignKey('Father.id'))
)

# 父表
class father(db.Model):
    __tablename__='Father'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    # 设置关联表 动态加载
    son_fa=db.relationship('son',secondary=gl,backref="fas",lazy="dynamic")
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '%s is %r'%(self.__class__.__name__,self.name)

# 子表
class son(db.Model):
    __tablename__='Son'
    id=db.Column(db.Integer, primary_key=True,autoincrement=True)
    name= db.Column(db.String(100),nullable=False)
    age= db.Column(db.Integer,nullable=False)
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __repr__(self):
        return '%s is %r'%(self.__class__.__name__,self.name)

可以看出我们已经创建出了一张关联表,名字就是我们设置的“glb”。

4.查看数据

1).查看全部数据(all)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
father.query.all()
2).精准查询(filter_by)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
father.query.filter_by(name='hw').all()  # 查找所有名字为hw的记录
3).模糊查询(filter)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
father.query.filter(father.name.startswith('h').all() # 查找所有名字首字母为h的记录
4).主键查询(get)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
father.query.get(1) # 查看id为1的记录
5).取反操作(not_)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import not_
father.query.filter(not_(father.name=='hw')).all() # 查找所有除了名字不是hw的记录
6).与操作(and_)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import and_
# 查找名字末尾是h并且年龄等于50的记录
father.query.filter(and_(father.name.endswith('h'),father.age==50)).all()
7).或操作(or_)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import or_
# 查找名字末尾是h或者年龄等于50的记录
father.query.filter(or_(father.name.endswith('h'),father.age==50)).all()
8).一对多正向查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter_by(f_id=2).all()
9).一对多反向查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter_by(fa=use1).all()
10).查询第一个出现的数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter(son.age==10).first()
son.query.filter(son.age==10)[0]
11).查询对象并返回指定数量的结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter(son.age==10).limit(10).all() # 返回十个查找到的对象
12).查询时指定偏移量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter(son.age==10).offset(2).all() # 返回偏移了2的对象
13).查找对象并排序
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter(son.age==10).order_by(son.create_time.desc()).all() # 返回按降序排序的记录
14).查找对象返回分组结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter(son.age==10).group_by(son.name).all() # 返回age为10的名字对象分组
15).返回查询结果的数量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query.filter(son.age==10).count() # son的年龄为10的数量
16).返回切片结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query(son).slice(10,40).all()   # son从1040的记录
son.query(son)[10:40]
17).分页获取数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p=request.args.get('p')
# 从请求的查询字符串中获取当前页面,返回一个每页显示3条记录的分页对象
paginate=son.query.paginate(p=int(p),per_page=3) 
paginate 属性:
pages     # 总共生成页面数量
page      # 当前页数
has_next  # 判断是否有下一页
has_prev  # 判断是否有上一页
next_num  # 获取下一页的页码数
prev_num  # 获取上一页的页码数
items     # 获取当前页的记录
total     # 查询返回的记录总数
18).查询仅显示一条记录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
son.query(son).one()

5.更新数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ss=son.query.get(1)
ss.name='fasd'     # 更改name的值来达到更新的目的
db.session.commit()

6.删除数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ss=son.query.get(1)
db.session.delete(ss)
db.session.commit()

三、总结

Sqlalchemy支持很多表的建立和操作,通过对它的了解,我们可以很方便的操作数据库的数据从而与前端页面交互达到可视化的效果,通过这篇文章的学习,相信你可以独立开发一个小网站了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
flask + pymysql操作Mysql数据库
安装flask-sqlalchemy、pymysql模块 pip install flask-sqlalchemy pymysql  ### Flask-SQLAlchemy的介绍 1. ORM:Object Relationship Mapping(模型关系映射)。 2. flask-sqlalchemy是一套ORM框架。 3. ORM的好处:可以让我们操作数据库跟操作对象是一样的,非常方便。因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象。 4. 安装`flask-sqlalchemy`:`su
用户1173509
2018/01/17
3.1K0
flask + pymysql操作Mysql数据库
3.Flask-SQLAlchemy
 (1)安装 pip install flask_sqlalchemy (2)数据库连接 from flask import Flask # 1.导入 from flask_sqlalchemy im
zhang_derek
2019/02/13
5710
Flask 系列之 SQLAlchemy
SQLAlchemy 是一种 ORM 框架,通过使用它,可以大大简化我们对数据库的操作,不用再写各种复杂的 sql语句 了。
py3study
2020/01/17
7510
flask-sqlalchemy 一对一,一对多,多对多操作
先进行如下操作: from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app=Flask(__name__) db=SQLAlchemy(app) 一对多: class Parent(db.Model):     id=db.Column(db.Integer,primary_key=True)     name=db.Column(db.String(30),unique=True)     children=db.re
用户1214487
2018/04/17
3.6K0
Flask构建微电影(二) 第三章、项目分析、搭建目录及模型设计
第三章、项目分析、搭建目录及模型设计 3.1.前后台项目目录分析 微电影网站 前台模块 后台模块  前台(home) 数据模型:models.py 表单处理:home/forms.py 模板目录:te
zhang_derek
2018/05/30
1K0
利用Flask搭建微电影视频网站(二):项目优化与模型设计
努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!
啃饼思录
2018/09/29
2.3K0
Flask入门到放弃(四)—— 数据库
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10979970.html
py3study
2020/01/15
3.5K0
图书馆数据库系统
library.py """ 分析图书馆案例 - 1.数据库配置 - 作者模型(一方) - 书籍模型(多方) - 2.添加测试数据 - 3.添加作者,书籍 - 4.删除作者,删除书籍 """ from flask import Flask, render_template, request, redirect,flash from flask_sqlalchemy import SQLAlchemy from flask_wtf.csrf import CSRFProtect app = Fl
小闫同学啊
2019/07/18
2.5K0
python学习笔记SQLAlchemy
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。
py3study
2020/01/09
3.2K0
【一周掌握Flask框架学习笔记】Flask中使用数据库(使用Flask-SQLAlchemy管理数据库)
SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升 SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
天道Vax的时间宝藏
2021/08/11
4.5K0
Flask-SQLAlchemy 对数据库的增查改删
使用 Flask-SQLAlchemy 连接数据库,可以通过 Python 对象来操作数据库。
Python碎片公众号
2021/02/26
3K0
Flask-SQLAlchemy 对数据库的增查改删
Flask数据库
Web应用中普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的。它使用结构化的查询语言。关系型数据库的列定义了表中表示的实体的数据属性。比如:商品表里有name、price、number等。 Flask本身不限定数据库的选择,你可以选择SQL或NOSQL的任何一种。也可以选择更方便的SQLALchemy,类似于Django的ORM。SQLALchemy实际上是对数据库的抽象,让开发者不用直接和SQL语句打交道,而是通过Python对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。
py3study
2020/01/16
3.1K0
Flask-SQLAlchemy 对数据库的过滤查询
使用 Flask-SQLAlchemy 从数据库中查询数据,可以指定查询的条件。数据库中的数据很多,用户需要的只是某一条数据或满足某个条件的数据。
Python碎片公众号
2021/02/26
5.3K0
Flask-SQLAlchemy 对数据库的过滤查询
小白学Flask第十二天| flask-sqlalchemy数据库扩展包(二)
今天整体的内容比较的简单,就是数据库的简单操作。大家只要记住这些语句就能够好好玩耍flask-sqlalchemy数据库了。
Python进击者
2019/10/10
5900
小白学Flask第十二天| flask-sqlalchemy数据库扩展包(二)
小白学Flask第十一天| flask-sqlalchemy数据库扩展包(一)
学习过web开发的人也许都知道,在web开发中最常用的数据库就是关系模型数据库,关系型数据库把所有的数据都存储在表中,表用来给应用的实体建模,表的列数是固定的,行数是可变的。查询的语句也是结构化的语言。
Python进击者
2019/10/10
2.7K0
小白学Flask第十一天|  flask-sqlalchemy数据库扩展包(一)
Flask架站基础篇(八)--SQLAlchemy(2)
零、数据库增删改查 1.增 # 增加数据 article1 = Article(title='aaa', content='bbb') # 以下这种方式也可以 # article1.content = 'ccc' # article1.title = 'ddd' # 保存数据 db.session.add(article1) # 提交事务 db.session.commit() 2.删 # 删除 article1 = Article.query.filter(article1.title == 'eee')
喵叔
2020/09/08
4790
python3 + flask + sqlalchemy
FLASK_APP = test_sqlalchemy.py FLASK_ENV = development FLASK_DEBUG = 1 In folder /Users/autotest/PycharmProjects/python3_flask /Users/autotest/PycharmProjects/python3_flask/venv/bin/python /Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py --module --multiproc --qt-support=auto --client 127.0.0.1 --port 55365 --file flask run pydev debugger: process 3089 is connecting
SingYi
2022/07/14
3830
python3 + flask + sqlalchemy
flask系列四之SQLAlchemy
(2)ORM(Object Relationship Mapping):模型关系映射
wfaceboss
2019/04/08
7840
flask系列四之SQLAlchemy
flask系列四之SQLAlchemy(二)表关系
目标:建立两个表“用户表(user)”和“问题表( question)”,其中问题表中的作者id是是用户表的id即外键的关系。(一个用户可以有多个问题)
wfaceboss
2019/04/08
5110
flask 操作数据库flask-sqlarchemy
from flask import Flask, render_template, session, redirect, url_for, flash from flask_bootstrap import Bootstrap from flask_sqlalchemy import SQLAlchemy
用户5760343
2019/07/07
7410
相关推荐
flask + pymysql操作Mysql数据库
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验