flask-ORM-对象关系映射

本文展示了如何在Python的Flask应用中使用ORM方式操作数据库,包括创建数据表、添加数据、更新数据以及查询数据。示例中创建了User对象,并通过Flask-SQLAlchemy库进行了增删查改操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ormapp.py

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

ormapp = Flask(__name__)
print('ormapp是否执行',type(ormapp))
# 配置链接参数
ormapp.config['SQLALCHEMY_DATABASE_URI']='mysql://root:a123@127.0.0.1:3306/learning'
db = SQLAlchemy(ormapp) # 绑定到flask对象
print('测试值ormapp')

# ORM模型创建
class User(db.Model):
    __tablename__ = 'user_test'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(64),nullable=False)
    password = db.Column(db.String(256),nullable=False)
    birth_date = db.Column(db.String(256),nullable=True)
    age = db.Column(db.Integer,default=0)

class UserAddress(db.Model):
    __tablename__ = 'user_addr'
    id = db.Column(db.Integer, primary_key=True)
    addr = db.Column(db.String(256),nullable=False)
    user_id = db.Column(db.Integer,db.ForeignKey('user_test.id'),nullable=False)
    '''
    反向引用,关联的是model的名称User;lazy的意思是具体访问查询的时候再显示
    user = User()
    user.address 找到具体user名下的所有地址列表

    addr = UserAddress()
    addr.user
    '''
    user = db.relationship('User',backref=db.backref('address',lazy=True))

@ormapp.route('/')
def index():
    return render_template('index.html')

@ormapp.route('/user/<int:page>/')
def user_page(page):
    """用户分页"""
    # 1.查询用户信息;2,用户分页
    user_list = User.query # 返回query对象
    print(user_list,type(user_list))
    # 返回paginate对象
    user_page = user_list.paginate(page,per_page=10)
    print(user_page)
    print(type(user_page))
    return render_template('user_page.html',user_page=user_page)

if __name__=="__main__":
    ormapp.run(debug=True)

终端命令添加数据

from learning.flask_orm.ormapp import db

db.create_all()

db.drop_all()

In [6]: from flask_orm.ormapp import User

In [7]: user = User(id=1,username='mark',password='mark123')

In [8]: db.session.add(user)

In [9]: db.session.commit()

In [10]: user = User(username='mark2',password='mk123',birth_date='2020-08-09',age=2)

In [11]: db.session.add(user)

In [12]: db.session.commit()

In [13]: user.id

Out[13]: 2

In [14]: user.username = '李四'

In [15]: db.session.add(user)

In [16]: db.session.commit()

In [23]: userc = User.query.filter_by(age=0)

In [24]: print(userc)

SELECT user_test.id AS user_test_id, user_test.username AS user_test_username, user_test.password AS user_test_password, user_test.birth_date AS user_test_birth_date, user_test.age AS user_test_age

FROM user_test

WHERE user_test.age = %s

In [31]: userc = User.query.filter_by(age=0).all()

In [32]: print(userc)

[<User 1>]

In [33]: userc[0]

Out[33]: <User 1>

In [34]: userc[0].age

Out[34]: 0

In [35]: userc[0].username

Out[35]: 'mark'

In [36]: userc = User.query.filter_by(age=0).first()

In [37]: userc

Out[37]: <User 1>

In [38]: userc.username

Out[38]: 'mark'

In [1]: for i in range(50):
   ...:     user = User(username='mark'+str(i),password=str(i)+'123',birth_date='2020-01-03
   ...: ',age=i)
   ...:     db.session.add(user)
   ...:     db.session.commit()
for循环往数据库添加数据

user_page.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>User页面</title>
</head>
<body>
<h3>用户分页</h3>
<h3>总共有{{ user_page.total }}用户,当前在第{{ user_page.page }}页用户</h3>
<p>
    用户列表:
<ul>
<!--    paginate对象.items属性,当前页的数据列表-->
    {% for user in user_page.items %}
    <li>{{ user.username }}——生日:{{ user.birth_date }}——age:{{ user.age }}</li>
    {% endfor %}
</ul>
{% if user_page.has_prev %}
<a href="{{ url_for('user_page',page=user_page.prev_num) }}">上一页</a>
{% endif %}
{% if user_page.has_next %}
<a href="{{ url_for('user_page',page=user_page.next_num) }}">下一页</a>
{% endif %}
</p>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值