一、连接mysql数据库:
使用连接mysql的工具库是pymysql
pip install pymysql
补充:本人在安装过程中出现的问题 作一下补充
1.出现timeout错误,导致下载工具失败。
由于网速较慢,pip默认下载时长为100秒,时间到没有下载完成强制关闭连接,导致下载失败。
解决办法:更换镜像或者增加下载时长
pip install --default timeout = 100000 pymysql
2.问题描述
代码不报错,但是运行程序时报出缺失库的问题:
然后输入安装命令时,显示需要的工具库已经存在,造成这样的原因是由于使用python虚拟解释器时,当前解释器内没有该工具库,但是在其他的环境中,已经下载了这个工具库。
解决方式:在安装库的命令后添加虚拟环境的路径:
pip install pymysql -- target [虚拟环境路径]
另外还需要另一个工具包Flask-SQLAlchemy,SQLAlchemy提供ORM技术,类似于操作普通Python对象一样去操作数据库,达到增删改查的效果。而Flask-SQLAlchemy是封装了SQLAlchemy,使得在flask中使用SQLAlchemy更为方便。
(看AI怎么说)
Flask-SQLAlchemy是一个Flask扩展,用于在Flask应用中使用SQLAlchemy进行数据库操作。SQLAlchemy是一个强大的Python SQL工具包和对象关系映射(ORM)库,它提供了一种方便的方式来操作数据库,同时也能够提供高级的查询和模型映射功能。Flask-SQLAlchemy简化了在Flask应用中使用SQLAlchemy的过程,提供了一些方便的功能,例如自动管理数据库会话和事务,以及提供了一些Flask特定的扩展,如Flask-Migrate用于数据库迁移。通过集成Flask-SQLAlchemy,可以更方便地在Flask应用中进行数据库操作。
配置代码:
app_config = Flask(__name__)
# MYSQL所在的主机名
HOSTNAME = '127.0.0.1'
# mysql监听的端口号,默认3306
PORT = 3306
# 连接mysql的用户名,读者用自己的用户名
USERNAME = 'root'
# 连接mysql的密码,读者用自己的密码
PASSWORD = '123456'
# MYSQL的数据库名称
DATABASE = 'reception_program'
app.config[
'SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"
# 在app.config中设置好连接数据库的信息
# 然后使用SQLAlchemy(app)创建一个db对象
# SQLAlchemy会自动读取app.config中连接数据库信息
db =SQLAlchemy(app_config)
二、orm与数据库的映射:
首先orm是什么:
ORM (Object-Relational Mapping)是一种技术,用于将对象和关系型数据库之间进行映射。它将数据库中的表映射为对象的属性,将数据库中的行映射为对象的实例。ORM框架使得开发人员可以通过编写面向对象的代码来操作数据库,而不需要直接使用SQL语句。ORM框架提供了一系列的API和工具,用于执行数据库的增删改查操作,并处理对象与数据库之间的映射和转换。常见的ORM框架有Hibernate、Django ORM和Entity Framework等。
所以我们需要创建与数据库关联的模型model,下面是我创建出的案例:
from reception_master.app import db
class ReceptionModel(db.Model):
"""
映射表格
"""
__tablename__ = "reception_info"
reception_id = db.Colum(db.Integer, primary_key=True)
customer_name = db.Colum(db.String(50), nullable=False)
collection_content = db.Colum(db.String(50), nullable=False)
amount = db.Colum(db.Decimal(10, 2), nullable=False)
amount_c = db.Colum(db.String(50), nullable=False)
abstract = db.Colum(db.String(50), nullable=False)
amount_method = db.Colum(db.String(50), nullable=False)
collection_people = db.Colum(db.String(50), nullable=False)
invoicing_people = db.Colum(db.String(50), nullable=False)
check_people = db.Colum(db.String(50), nullable=False)
invoicing_time = db.Colum(db.Datetime, nullable=False)
status = db.Colum(db.Integer, nullable=False)
deposit_bank = db.Colum(db.String(50), nullable=False)
bank_account = db.Colum(db.String(20), nullable=False)
可以利用模型直接在数据库生成表。
db.create_all()
如果出现上下文连接异常问题,可以with app.app_context:
三、实现增删改查:
1.增
@app.route("/users/create", methods=["GET", "POST"])
def user_create():
if request.method == "POST":
user = User(
username=request.form["username"],
email=request.form["email"],
)
db.session.add(user)
db.session.commit()
return redirect(url_for("user_detail", id=user.id))
return render_template("user/create.html")
2.删
@app.route("/user/<int:id>/delete", methods=["GET", "POST"])
def user_delete(id):
user = db.get_or_404(User, id)
if request.method == "POST":
db.session.delete(user)
db.session.commit()
return redirect(url_for("user_list"))
return render_template("user/delete.html", user=user)
3.改
@app.route("/user/<int:id>")
def user_detail(id):
user = db.get_or_404(User, id)
return render_template("user/detail.html", user=user)
4.查
@app.route("/users")
def user_list():
users = db.session.execute(db.select(User).order_by(User.username)).scalars()
return render_template("user/list.html", users=users)