MySQL
以下展示在代码中连接mysql数据库的操作。
首先需要安装mysql;之后需要在命令行中进入mysql(通过指令mysql -u root -p
);进入mysql后,使用create database database_learn;
创建名为database_learn的数据库;最后在代码中连接数据库,当pycharm命令行显示结果(1, )
时,说明连接成果。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
HOST_NAME = "127.0.0.1"
PORT = 3306
USERNAME = "root"
PASSWORD = ""
DATABASE = "database_learn"
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{
USERNAME}:" \
f"{
PASSWORD}@{
HOST_NAME}:{
PORT}/{
DATABASE}?" \
f"charset=utf8"
db = SQLAlchemy(app)
with db.engine.connect() as conn:
rs = conn.execute("select 1")
print(rs.fetchone())
使用Flask-SQLAlchemy创建表
class User(db.Model):
__tablename__ = "user"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(100))
password = db.Column(db.String(100))
db.create_all()
首先创建一个User类,并且它继承自db.Model类,所有ORM模型必须是db.Model的直接或间接子类。然后通过__tablename__
属性,指定User模型映射到数据库中表的名称(即,待会儿使用SQLAlchemy创建的表名称就是__tablename__
属性指定的名称)。接着定义三个db.Column类型的类属性,分别是id、username、password,只有使用db.Column定义的类属性,才会被映射到数据库表中称为字段。 在以上的数据库表字段定义中,将id定义为数据库类型中的整型,设置primary_key = True
表示将id视为主键,传递autoincrement = True
设置id自增长。username和password类型均为db.String,在数据库中表现为varchar(100)。最后通过db.create_all()
把User模型映射成数据库中的表。
CRUD操作
可以直接使用ORM模型进行CRUD(增删改查)操作(前面定义的User类即一个ORM模型,因为它直接继承自db.Model),需要先把操作添加到会话中,通过db.session可以获取会话对象。会话对象在内存中,调用db.session.commit(),可以执行对应的操作,执行db.session.rollback(),可以回滚。
Create操作
通过ORM模型可以实现向表中添加数据的操作,使用的方法是db.session.add(x)
,其中x是对应数据库某张表的ORM模型实例,如,一个User类的实例。
@app.route('/user/add')
def user_add():
user1 = User(username="张三", password="111111")
user2 = User(username="里斯", password="222222")
user3 = User(username="汪芜", password="333333")
db.session.add(user1)
db.session.add(user2)
db.session.add(user3)
db.session.commit()
return "用户添加成功!"
在database_learn数据库的user表中查看三条信息是否添加:
注:在创建User对象时,必须通过关键字参数为字段赋值,否则SQLAlchemy将不知道给哪个字段赋值,从而报错。
Read操作
可以使用db.Model内置的query实现Read操作。query上的方法分为提取方法和过滤方法两大类,先介绍提取方法。
@app.route('/user/fetch')
def user_fetch():
#👇获取user中的全部数据
users = User.query.all()
print(users)