连接数据库
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
#链接数据库
HOSTNAME ='localhost'
PORT =3306
USERNAME ='root'
PASSWORD = 'ren'
DATABASE ='db01'
app.config['SQLALCHEMY_DATABASE_URI'] =f"mysql+pymysql://{USERNAME }:{PASSWORD}@{HOSTNAME}:{PORT }/{DATABASE}?charset=utf8"
db = SQLAlchemy(app)
migrate = Migrate(app,db)
#检查数据库是否链接成功
# with db.engine.connect()as conn:
# rs = conn.execute('select 1')
# print(rs.fetchone())
class User(db.Model):
__tablename='user'
#类型int,主键,自动增长
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
#varchar,字符不能为空
username = db.Column(db.String(100),nullable=False)
password = db.Column(db.String(100),nullable=False)
#上下文联系
#创建表
# db.create_all()
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()
增
#添加
@app.route('/user/add')
def add_user():
#1.创建ORM对象
user = User(username='法外狂徒张三', password='11111111')
#2.将ORM对象添加到db.session中
db.session.add(user)
#3.将db.session 中的改变同步到数据库中
db.session.commit()
return "用户创建成功"
查
#查询
@app.route('/user/query')
def query_user():
#1.get查找,根据主键
# user = User.query.get(1)
# print(f"{user.id}:{user.username}--{user.password}")
# #2.filter_by 查找多条数据,返回类数组
users=User.query.filter_by(username="法外狂徒张三")
for user in users:
print(user.username)
return "数据查询成功"
更
#更新
@app.route('/user/update')
def update_user():
#user= User.query.filter_by(username="法外狂徒张三")[0]
user= User.query.filter_by(username="法外狂徒张三").first()
user.password="2222222"
db.session.commit()
return "数据修改成功"
删
#删除
@app.route('/user/delete')
def delete_user():
#1.查找
user = User.query.get(1)
#2.从db.session中删除
db.session.delete(user)
#3.将db.session中修改,同步到数据库中
db.session.commit()
return "数据库删除成功"
外键
for article in User.articles
article.title
User.articles是一个类数组,
article是一个类,
title是原本类里的属性
class User(db.Model):
__tablename='user'
#类型int,主键,自动增长
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
#varchar,字符不能为空
username = db.Column(db.String(100),nullable=False)
password = db.Column(db.String(100),nullable=False)
#外键
class Aritcle(db.Model):
__tablename = 'article'
# 类型int,主键,自动增长
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(200),nullable=False)
content = db.Column(db.Text,nullable=False)
#添加外键
author_id = db.Column(db.Integer,db.ForeignKey("user.id"))
#back_populates 互相定义
#backref:会自动给User模型添加一个articles的属性
#user.articles
#Aritcle----author属于的属性,User----articles属于的属性
author = db.relationship("User",backref="articles")
#外键添加
@app.route('/article/add')
def add_article():
article1 = Aritcle(title="学习",content="Flask")
#绑定关系
article1.author=User.query.get(2)
article2 = Aritcle(title="学习wu", content="Diss")
article2.author = User.query.get(2)
#添加到session中
db.session.add_all([article1,article2])
#同步session到数据库中
db.session.commit()
return "文章添加成功"
@app.route('/article/query')
def query_article():
user = User.query.get(2)
for article in user.articles:
print(article.title)
return "文章查找成功"
migrate = Migrate(app,db)
#ORM模型映射成表三步
# 1. flask db init ;这一步执行一次
# 2.flask db migrate; 识别ORM模型的改变,生成迁移脚本
# 3.flask db upgrade ; 运行迁移脚本,同步到数据库。
完整代码
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
#链接数据库
HOSTNAME ='localhost'
PORT =3306
USERNAME ='root'
PASSWORD = 'ren'
DATABASE ='db01'
app.config['SQLALCHEMY_DATABASE_URI'] =f"mysql+pymysql://{USERNAME }:{PASSWORD}@{HOSTNAME}:{PORT }/{DATABASE}?charset=utf8"
db = SQLAlchemy(app)
migrate = Migrate(app,db)
#ORM模型映射成表三步
# 1. flask db init ;这一步执行一次
# 2.flask db migrate; 识别ORM模型的改变,生成迁移脚本
# 3.flask db upgrade ; 运行迁移脚本,同步到数据库。
#检查数据库是否链接成功
# with db.engine.connect()as conn:
# rs = conn.execute('select 1')
# print(rs.fetchone())
class User(db.Model):
__tablename='user'
#类型int,主键,自动增长
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
#varchar,字符不能为空
username = db.Column(db.String(100),nullable=False)
password = db.Column(db.String(100),nullable=False)
#外键
class Aritcle(db.Model):
__tablename = 'article'
# 类型int,主键,自动增长
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(200),nullable=False)
content = db.Column(db.Text,nullable=False)
#添加外键
author_id = db.Column(db.Integer,db.ForeignKey("user.id"))
#back_populates 互相定义
#backref:会自动给User模型添加一个articles的属性
#user.articles
#Aritcle----author属于的属性,User----articles属于的属性
author = db.relationship("User",backref="articles")
#上下文联系
#创建表
# db.create_all()
#添加
@app.route('/user/add')
def add_user():
#1.创建ORM对象
user = User(username='法外狂徒张三', password='11111111')
#2.将ORM对象添加到db.session中
db.session.add(user)
#3.将db.session 中的改变同步到数据库中
db.session.commit()
return "用户创建成功"
#查询
@app.route('/user/query')
def query_user():
#1.get查找,根据主键
# user = User.query.get(1)
# print(f"{user.id}:{user.username}--{user.password}")
# #2.filter_by 查找多条数据,返回类数组
users=User.query.filter_by(username="法外狂徒张三")
for user in users:
print(user.username)
return "数据查询成功"
#更新
@app.route('/user/update')
def update_user():
#user= User.query.filter_by(username="法外狂徒张三")[0]
user= User.query.filter_by(username="法外狂徒张三").first()
user.password="2222222"
db.session.commit()
return "数据修改成功"
#删除
@app.route('/user/delete')
def delete_user():
#1.查找
user = User.query.get(1)
#2.从db.session中删除
db.session.delete(user)
#3.将db.session中修改,同步到数据库中
db.session.commit()
return "数据库删除成功"
#外键添加
@app.route('/article/add')
def add_article():
article1 = Aritcle(title="学习",content="Flask")
#绑定关系
article1.author=User.query.get(2)
article2 = Aritcle(title="学习wu", content="Diss")
article2.author = User.query.get(2)
#添加到session中
db.session.add_all([article1,article2])
#同步session到数据库中
db.session.commit()
return "文章添加成功"
@app.route('/article/query')
def query_article():
user = User.query.get(2)
for article in user.articles:
print(article.title)
return "文章查找成功"
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()