Flask中的ORM使用

这篇博客介绍了Flask中使用ORM,特别是SQLAlchemy的实践。从安装、数据库设置到单表操作(CRUD)、一对多关系的建立和查询,详细阐述了Flask-SQLAlchemy的使用方法。通过实例展示了如何创建模型、应用表结构、进行数据操作,并对比了ORM与原生SQL的优缺点。
摘要由CSDN通过智能技术生成

前言

最近几天接触了一下Flask,在惊叹于其简洁性的同时,更是被其先进的设计理念折服。但是一直以来对于它的ORM不是很理解,借此机会,做下实践,让自己对此加深一下印象。

权当是留给自己的一个纪念吧。

ORM拓展

Flask中可以使用的拓展有很多。或者可以这么说, 在flask中,你可以使用ORM,也可以不使用ORM。一切都在您的掌控中。

而在众多的ORM框架汇中,SQLAlchemy算是老大哥了。特别地,Flask中有专门针对于SQLAlchemy的拓展,使得包装后的SQLAlchemy更加易用。

安装

安装步骤非常简单,前提是安装了pip的话。

pip install flask-sqlalchemy

数据库设置

在Flask中,既可以使用关系型数据库,还可以使用非关系型数据库。一切都可以由你自己控制。这里先拿关系型数据库入手吧。

对于关系型数据库,常见的有这么几个,sqlite3, MySQL, PostgreS

好的,我可以为您提供一个简单的 Flask 应用程序,包括登录和注册功能,并使用 ORM 和 MySQL 进行数据库用户名校验。请注意,这是一个基本且简化的示例,仅供参考。 首先,您需要安装 FlaskFlask-WTF、Flask-MySQLdb 等必要的库。您可以使用以下命令安装这些库: ```python pip install flask pip install Flask-WTF pip install Flask-MySQLdb ``` 接下来,您需要创建一个 MySQL 数据库,用于存储用户信息。在 MySQL ,您可以使用以下命令创建一个名为 `users` 的表: ```mysql CREATE TABLE users ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, password VARCHAR(50) NOT NULL, PRIMARY KEY (id) ); ``` 现在,让我们编写 Flask 应用程序。首先,导入必要的库: ```python from flask import Flask, render_template, redirect, url_for, flash from flask_mysqldb import MySQL from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, EqualTo, Length from werkzeug.security import generate_password_hash, check_password_hash ``` 然后,创建 Flask 应用程序和 MySQL 实例: ```python app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key-here' app.config['MYSQL_HOST'] = 'localhost' app.config['MYSQL_USER'] = 'your-mysql-username-here' app.config['MYSQL_PASSWORD'] = 'your-mysql-password-here' app.config['MYSQL_DB'] = 'your-mysql-database-name-here' mysql = MySQL(app) ``` 接下来,定义用户模型和表单: ```python class User: def __init__(self, id, username, password): self.id = id self.username = username self.password = password class RegistrationForm(FlaskForm): username = StringField('Username', validators=[DataRequired(), Length(min=4, max=50)]) password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=50)]) confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField('Register') class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired(), Length(min=4, max=50)]) password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=50)]) submit = SubmitField('Login') ``` 然后,编写注册和登录视图函数: ```python @app.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationForm() if form.validate_on_submit(): username = form.username.data password = generate_password_hash(form.password.data) cur = mysql.connection.cursor() cur.execute('SELECT * FROM users WHERE username = %s', (username,)) if cur.fetchone(): flash('Username already exists', 'error') else: cur.execute('INSERT INTO users (username, password) VALUES (%s, %s)', (username, password)) mysql.connection.commit() flash('Successfully registered', 'success') return redirect(url_for('login')) return render_template('register.html', form=form) @app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): username = form.username.data password = form.password.data cur = mysql.connection.cursor() cur.execute('SELECT * FROM users WHERE username = %s', (username,)) user = cur.fetchone() if user and check_password_hash(user[2], password): user_obj = User(user[0], user[1], user[2]) flash('Successfully logged in', 'success') # do something with the user object, e.g. store in session return redirect(url_for('index')) else: flash('Invalid username or password', 'error') return render_template('login.html', form=form) ``` 最后,编写模板文件 `register.html` 和 `login.html`,用于呈现注册和登录表单。 这就是一个简单的 Flask 应用程序,包括登录和注册功能,并使用 ORM 和 MySQL 进行数据库用户名校验。请注意,这只是一个示例,您需要根据自己的需求进行修改和改进。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰 戈 尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值