flask flask-sqlalchemy sqlit3

这次是数据库使用,拒绝花哨主打就是一个简单

pip install flask-sqlalchemy

调用数据库现在配置里边设置下然后绑上APP后,定义数据结构类.下面是我认为最简单的数据库增删查改结构。

python 复制代码
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
##定义数据结构类
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    def __repr__(self):
        return '<User %r>' % self.username
## 如果没有表要创建表,有的话则无改动
with app.app_context():
    db.create_all()
##查询数据
@app.route("/sql")
def find_all_users():
    users = User.query.all()
    print(users)
    return render_template("sql.html", users=users)
##查询一个数据
@app.route("/get/<int:get_id>")
def get_by_id(get_id):
    get_user = User.query.get(get_id)  # User.query.filter_by(id=get_id).first()
    return "编号:{0},用戶名:{1},邮箱:{2}".format(get_user.id, get_user.username, get_user.email)
##增加数据
@app.route("/add/<username>")
def add_user(username):
    new_user = User()
    new_user.username = username
    new_user.email = username + "@qq.com"
    db.session.add(new_user)
    db.session.commit()
    return redirect("/")
##删除数据
@app.route("/delete/<int:del_id>")
def delete_by_id(del_id):
    del_user = User.query.filter_by(id=del_id).first()
    if del_user is not None:
        db.session.delete(del_user)
        db.session.commit()
    return redirect("/")

@app.route("/update", methods=["GET", "POST"])
def update():
    if request.method == "POST":
        user_id = request.form.get("id")
        new_username = request.form.get("username")
        new_email = request.form.get("email")
        user = User.query.get(user_id)
        if user:
            user.username = new_username
            user.email = new_email
            db.session.commit()
        return redirect(url_for("update"))
    users = User.query.all()
    return render_template("update.html", users=users)

sql.html

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table border="1">
    <tr>
        <th>编号</th>
        <th>用户名</th>
        <th>邮箱</th>
        <th>操作</th>
    </tr>
    {% for u in users %}
        <tr>
            <td>{{ u.id }}</td>
            <td>{{ u.username }}</td>
            <td>{{ u.email }}</td>
            <td>
                <a href="delete/{{ u.id }}">删除</a>
            </td>
        </tr>
    {% endfor %}
</table>

update.html

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Update User</title>
</head>
<body>
    <table border="1">
        <tr>
            <th>编号</th>
            <th>用户名</th>
            <th>邮箱</th>
        </tr>
        {% for u in users %}
            <tr>
                <td>{{ u.id }}</td>
                <td>{{ u.username }}</td>
                <td>{{ u.email }}</td>
            </tr>
        {% endfor %}
    </table>
    <h2>更新用户信息</h2>
    <form action="/update" method="post">
        <label for="id">用户ID:</label><br>
        <input type="text" id="id" name="id" required><br>
        <label for="username">新用户名:</label><br>
        <input type="text" id="username" name="username" required><br>
        <label for="email">新邮箱:</label><br>
        <input type="email" id="email" name="email" required><br>
        <input type="submit" value="更新">
    </form>
</body>
</html>

补充内容数据迁移

安装

pip install flask-migrate

app 里边进行注册和绑定

python 复制代码
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
from flask_migrate import Migrate
migrate =Migrate(app,db)

类似GIT的版本控制。流程为初始化(只执行一次)==》构建迁移脚本=》迁移

flask db init

flask db migrate

flask db upgrade

这脚本自动构建的时候经常自己出错需要打开排查

相关推荐
糊涂君-Q3 分钟前
Python小白学习教程从入门到入坑------第三十一课 迭代器(语法进阶)
python·学习·程序人生·考研·职场和发展·学习方法·改行学it
天飓8 分钟前
基于OpenCV的自制Python访客识别程序
人工智能·python·opencv
取个名字真难呐18 分钟前
矩阵乘法实现获取第i行,第j列值,矩阵大小不变
python·线性代数·矩阵·numpy
夜色呦23 分钟前
现代电商解决方案:Spring Boot框架实践
数据库·spring boot·后端
爱敲代码的小冰32 分钟前
spring boot 请求
java·spring boot·后端
技术仔QAQ37 分钟前
【tokenization分词】WordPiece, Byte-Pair Encoding(BPE), Byte-level BPE(BBPE)的原理和代码
人工智能·python·gpt·语言模型·自然语言处理·开源·nlp
WangYaolove13141 小时前
请解释Python中的装饰器是什么?如何使用它们?
linux·数据库·python
宋发元1 小时前
如何使用正则表达式验证域名
python·mysql·正则表达式
java小吕布2 小时前
Java中的排序算法:探索与比较
java·后端·算法·排序算法
XMYX-02 小时前
Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
python·elasticsearch·jenkins