Python全系列 教程
3567个小节阅读:5929.7k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
Flask-SQLAlchemy是一个插件,
Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装的一个插件,
使得我们在flask中使用sqlalchemy更加的简单。
xxxxxxxxxx
pip install flask-sqlalchemy
数据库初始化不再是通过create_engine。
跟sqlalchemy一样,定义好数据库连接字符串DB_URI。
将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI
这个key名配置到app.config
中。
xxxxxxxxxx
app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI
使用flask_sqlalchemy.SQLAlchemy
这个类定义一个对象,并将app
传入进去。
xxxxxxxxxx
db = SQLAlchemy(app)
之前都是通过Base = declarative_base()来初始化一个基类,然后再继承,在Flask-SQLAlchemy中更加简单了
delarative_base
来创建一个基类。而是使用db.Model
来作为基类Column
、String
、Integer
以及relationship
等,都不需要导入了,直接使用db
下面相应的属性名就可以了__tablename__
,那么flask_sqlalchemy
会默认使用当前的模型的名字转换成小写来作为表的名字并且如果这个模型的名字用到了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接,
虽然flask_sqlalchemy给我们提供了这个特性,但是不推荐使用。(增强代码可读性,提高团队合作效率)
写完模型类后,要将模型映射到数据库的表中,使用以下代码即可
1. 删除数据库表:db.drop_all()
2. 创建数据库表:db.create_all()
以后session也不需要使用sessionmaker
来创建了,
直接使用db.session
就可以了,
操作这个session的时候就跟之前的sqlalchemy
的session
是一样一样的。
这时候就可以在数据库中看到已经生成了对应表了
添加数据和之前的没有区别,只是session成为了一个db的属性
查询数据不再是之前的session.query方法了,而是将query属性放在了db.Model上,
所以查询就是通过“模型名.query”的方式进行查询了,query
就跟之前的sqlalchemy中的query方法是一样用的。
如果查找数据涉及多个模型,只能使用db.session.query(模型名).all() 这种方式
修改数据和之前的没有区别,只是session成为了一个db的属性
删除数据跟添加数据和修改数据类似,只不过session是db的一个属性而已
xxxxxxxxxx
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库的变量
HOST = '192.168.30.151' # 127.0.0.1/localhost
PORT = 3306
DATA_BASE = 'flask_db'
USER = 'root'
PWD = '123'
DB_URI = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 链接数据库
db = SQLAlchemy(app)
# 创建模型类
class User(db.Model):
__tablename__ = 't_user' # flask_alchemy可以忽略不写
id = db.Column(db.Integer,primary_key = True,autoincrement = True)
name = db.Column(db.String(32))
def __repr__(self):
return f'<User id={self.id} name={self.name}>'
class News(db.Model):
__tablename__ = 't_news' # flask_alchemy可以忽略不写
id = db.Column(db.Integer,primary_key = True,autoincrement = True)
content = db.Column(db.String(100))
uid = db.Column(db.Integer,db.ForeignKey('t_user.id'))
user = db.relationship('User',backref='newss')
def __repr__(self):
return f'<News id={self.id} content={self.content}>'
# 删除表
# db.drop_all()
# 创建表
# db.create_all()
# 增加数据
def create_data():
user = User(name = '百战')
news = News(content = 'Python内容')
user.newss.append(news)
db.session.add(user)
db.session.commit()
# 查询单表数据
def query_data_one():
users = User.query.all()
print(users)
# 查询多表
def query_data_many():
rs = db.session.query(User,News.content).join(News,News.uid == User.id).all()
print(rs)
# 修改数据
def update_data():
user = User.query.first()
user.name = '百战程序员'
db.session.commit()
# 删除数据
def delete_data():
news = News.query.first()
db.session.delete(news)
db.session.commit()
if __name__ == "__main__":
# create_data()
# query_data_one()
# query_data_many()
# update_data()
delete_data()