flask後端代碼
from flask import Flask,render_template,abort
from flask_sqlalchemy import SQLAlchemy
import pymysql
import datetime
pymysql.install_as_MySQLdb()
app = Flask(__name__)
# 設置連接數據庫的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:[email protected]:3306/db_flask'
# 數據庫和模型類同步修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 查詢時會顯示原始SQL語句
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
class Category(db.Model):
__tablename__ = 'tbl_category'
id = db.Column(db.Integer,primary_key=True)#告訴它這是一個主鍵
name = db.Column(db.String(32),nullable=False)#告訴它默認值不能爲null
news = db.relationship('News',backref='category')
#加上這個之後,查詢的話可以直接點
#分類查文章的話直接 category.news 表示查詢這個分類下的所有文章
#然後 news.category 表示查詢這個文章的分類
class News(db.Model):
__tablename__ = 'tbl_news'
id = db.Column(db.Integer,primary_key=True)
title = db.Column(db.String(37),nullable=False)
created_time = db.Column(db.DateTime,default=datetime.datetime.now())
cate_id = db.Column(db.Integer,db.ForeignKey('tbl_category.id'))
#一對多
@app.route('/')
def index():
#cats = Category.query.all()
cat = Category.query.get(id)
if not cat:
abort(404)
else:
news = cat.news
ctx = {
'cats':news
}
return render_template('12index.html',**ctx)
@app.route('/cat/<int:id>/')
def cat(id):
news = News.query.filter_by(cate_id=id).all()
ctx = {
'news':news
}
return render_template('12new.html', **ctx)
@app.route('/test')
def test():
Category.query.get(1)#根據主鍵去查詢,這個返回的是一個對象
Category.query.filter_by(id=1).all()#列表形式返回,前端需要遍歷
Category.query.filter_by(id=1,name='娛樂').all()#根據兩個條件來查(兩個條件都必須滿足)
#或者查詢(滿足其中一個條件就可以)
from sqlalchemy import or_
Category.query.filter(or_(Category.id == 1,Category.name=='科技')).all()
Category.query.filter_by(id=1,name='娛樂').first()#返回一個對象,不需要遍歷
#filter查詢的寫法,必須得加上類名.//// ==
Category.query.filter(Category.id == 1).all()#列表
#filter可以支持複雜查詢
Category.query.filter(Category.name.startswith('科技')).all()
#表示以科技開頭
Category.query.offset(1).all()
#表示跳過第一條數據,查詢除了第一個數據之外所有的數據
Category.query.offset(0).limit(1).all()
#表示跳過第一條數據,返回至少一條數據
Category.query.order_by(Category.id.desc().offset(1).limit(1)).all()
#表示倒敘查找,先倒再查
# 分類
from sqlalchemy import func
db.session.query(News.cate_id,func.count(News.cate_id)).group_by(News.cate_id).all()
#模糊查詢
Category.query.filter_by(Category.name.contains('娛樂')).all()
return '查詢其他'
if __name__ == '__main__':
# db.drop_all()#全部刪除
# # db.create_all()#表示重新創建
# # cat = Category(name='科技')
# # cat1 = Category(name='娛樂')
# #
# # #db.session.add(cat)#添加單個數據
# # #添加多個數據
# # db.session.add_all([cat,cat1])
# #
# # db.session.commit()
# # #先提交,讓這個表先生成id,然後新聞才能夠點出來數據
# #
# # #給新聞添加數據
# # new = News(title='科技前沿',cate_id=cat.id)
# # new2 = News(title='一起來喫瓜',cate_id=cat1.id)
# # db.session.add_all([new,new2])
# # db.session.commit()
app.run(debug=True)
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for cat in cats %}
<li><a href="/cat/{{ cat.id }}">{{ cat.name }}</a></li>
{% endfor %}
</body>
</html>
new.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for new in news %}
<li><a>{{ new.title }}</a></li>
{% endfor %}
</body>
</html>
運行結果: