form = NameForm()
if form.validate_on_submit():
user = User.query.filter(username=form.name.data).first()
if user is None:
user = User(username=form.name.data)
db.session.add(user)
db.session.commit()
session['known'] = False
else:
session['known'] = True
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'),
known=session.get('known', False))
配套模板:
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}MyFlask{% endblock %}
{% block page_content %}
<div class="page-header">
<h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}</h1>
{% if not known %}
<p>Pleased to meet you!</p>
{% else %}
<p>Happy to see you again!</p>
{% endif %}
{{ wtf.quick_form(form) }}
{% endblock %}
参考资料:《Flask Web开发(第二版)》
实现一个用户数据的名字记录到数据库中:@app.route('/', methods=['GET', 'POST'])def index(): form = NameForm() if form.validate_on_submit(): user = User.query.filter(username=form.name.data).first() if user is None: user = User(username=
@orm.reconstructor
sqlalchemy
创建实例的时候并不是像我们普通通过构造
函数
这样创建的方式来创建的, 而是通过元类的方式动态的创建实例对象。在python里面绝大多数的ORM都是通过元类的方式来创建对象,而不是通过普通实例化方式来创建的。那么通过元类的方式创建至少在
sqlalchemy
里面是不会通过构造
函数
来创建的。
如果我们就想在模型对象实例化的时候执行__init_...
一、
SQLAlchemy
简介
1.1、
SQLAlchemy
是什么?
sqlalchemy
是一个python语言实现的的针对关系型
数据库
的orm库。可用于连接大多数常见的
数据库
,比如Postges、MySQL、SQLite、Oracle等。
1.2、为什么要使用
SQLAlchemy
?
它将你的代码从底层
数据库
及其相关的SQL特性
中
抽象出来。
1.3、
SQLAlchemy
提供了两种主要的使用模式
SQL表达式语言(
SQLAlchemy
Core)
1.4、应该选择哪种模式?
虽然你使用的框架
中
已经内置
1.定义:
当查询的复杂度很高时,指多字段,多关系查询,会导致sql语句混乱,不利于sql语句的编写和编写的sql语句的可读性,引入了
视图
视图
是一张虚拟的表,有字段和数据,只存放查询语句
视图
有字段有行,但是
视图
基于源表
2.特点:
视图
的优点
1.简单:
视图
构建了一个虚拟的表,表里的数据是来源于复杂的查询语句,我们将复杂的查询语句存入
视图
,使用是直接调用
视图
2.安全...
```python
from
flask
import
Flask
, jsonify, request
from
flask
_
sqlalchemy
import
SQLAlchemy
app =
Flask
(__name__)
app.config['
SQLALCHEMY
_DATABASE_URI'] = 'sqlite:///database.db'
db =
SQLAlchemy
(app)
3. 创建一个模型类
```python
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(50), nullable=False, unique=True)
4. 创建
数据库
表
```python
db.create_all()
5. 定义路由和
视图
函数
```python
@app.route('/users', methods=['GET'])
def get_users():
users = User.query.all()
return jsonify({'users': [user.to_dict() for user in users]})
@app.route('/users', methods=['POST'])
def create_user():
user_data = request.get_json()
user = User(name=user_data['name'], email=user_data['email'])
db.session.add(user)
db.session.commit()
return jsonify({'message': 'User created successfully'})
@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
user = User.query.get(user_id)
user_data = request.get_json()
user.name = user_data['name']
user.email = user_data['email']
db.session.commit()
return jsonify({'message': 'User updated successfully'})
@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
user = User.query.get(user_id)
db.session.delete(user)
db.session.commit()
return jsonify({'message': 'User deleted successfully'})
6. 运行应用程序
```python
if __name__ == '__main__':
app.run(debug=True)
现在你可以使用Postman或其他HTTP客户端应用程序测试这个API,例如:
- GET /users - 获取所有用户
- POST /users - 创建新用户
- PUT /users/1 - 更新ID为1的用户
- DELETE /users/1 - 删除ID为1的用户
注意:这只是一个简单的示例,实际使用
中
需要考虑更多的数据验证、错误处理和安全性问题。
ERROR: Could not find a version that satisfies the requirement alembic==1.5.7 (from versions: none)