环境:window操作环境
数据库:mysql
python版本:3.x
阅读目录
- ORM的介绍
- flask-sqlalchemy的安装
- 数据库表的设计和基本增删改查使用
ORM的介绍
Object-relation-map 模型(类) 关系的 映射
flask-sqlalchemy是一套orm框架能够帮助我们操作数据库就跟操作类一样
一个表==一个类 一个表中的数据相当于一个对象
安装方法:
pip install flask-sqlalchemy
项目代码加注释
config.py
# coding:utf-8
# author:诸葛亮晶晶
# Python学习交流公众号 dyq20151205
'''
配置文件用于存放关于数据库的一些参数设置及DEBUG
'''
DEBUG=True
#指定数据库+数据库引擎……sql数据库不识别-所以字符集写成utf8
#dialect+driver://username:password@host:port/database
DIALECT = 'mysql'
DRIVER = 'pymysql'
USERNAME = 'root'
PASSWORD = 'QQqq123456789'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'myblog'
SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = False
app.py
# coding:utf-8
# author:诸葛亮晶晶
# Python学习交流公众号 dyq20151205
'''
return redirect(url_for('函数名',id=222)) 反url+参数后重定向网址
url_for()通过方法名字反查找对应的网址
数据的增删通过db.session.add/delete实现
通过db.sessioin.commit()事务提交真正插入到数据库中
'''
from flask import Flask,url_for,redirect,render_template
from flask_sqlalchemy import SQLAlchemy
import config
app=Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
#创建用户表和文章表示一对多的关系
class User(db.Model):
__tablename__ = 'user'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
username=db.Column(db.String(100),nullable=False)
#创建一个模型=类=表
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
title=db.Column(db.String(100),nullable=False)
content=db.Column(db.Text,nullable=False)
author_id=db.Column(db.Integer,db.ForeignKey('user.id'))
'''类似是个user对象 ,正反向引用 通过文章查找作者,通过作者查找他的所有文章,
他会根据此类中和User表有关联的外键去获取信息'''
author = db.relationship('User',backref = db.backref('articles'))
'''通过这个可以检测数据库配置是否完成'''
db.create_all()
@app.route('/')
def index():
'''添加用户'''
# user1 = User(username='dx')
# user2 = User(username='yhl')
# db.session.add(user1)
# db.session.add(user2)
# db.session.commit()
'''添加文章'''
# article1 = Article(title='title2', content='content2')
# article1.author = User.query.filter(User.username == 'dx').first()
# db.session.add(article1)
# db.session.commit()
'''通过标题查抄文章的作者信息'''
article = Article.query.filter(Article.title == 'title1').first()
print(article.author.username)
'''通过作者名字查找他写过的所有文章'''
user=User.query.filter(User.username == 'dx').first()
results =user.articles
for article in results:
print(article.title)
return render_template('index.html')
@app.route('/login')
def loginpage():
return render_template('loginpage.html')
if __name__ == '__main__':
app.run()
关于html文件编写过程中如何引用外部静态文件
静态文件
static
template
这两个文件夹python的jinjia模板会自动识别
在实际项目开发中 每个页面的css 和Script都会单独写在静态文件中
<link rel="stylesheet" href="{{ url_for('static',filename='css/index.css')}}">
<img src="{{url_for('static',filename='images/logo.png')}}>
<script src="{{url_for('static',filename='js/index.js')}}"></script>