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>