flask连接数据库(flask_sqlalchemy)-2021.3.26

flask连接数据库(flask_sqlalchemy)

1.导入扩展类

Flask 有大量的第三方扩展,这些扩展可以简化和第三方库的集成工作。 Flask-SQLAlchemy 可以方便操作数据库。

from flask_sqlalchemy import SQLAlchemy  # 导入扩展类

app = Flask(__name__)
2.设置数据库URI

连接信息拼接方式(scott为用户名,tiger为密码)

Postgres:

//scott:tiger@localhost/mydatabase

MySQL:

//scott:tiger@localhost/mydatabase

Oracle:

//scott:tiger@127.0.0.1:1521/sidname
# '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'
# 即前面加上连接数据库+对应的包!!!
# pymysql,flask连接mysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://<username>:<password>@<host>/<dbname>'    

# cx_Oracle,flask连接oracle
app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle+cx_oracle://user:pass@host:port/servicename'


# 注意oracle最后为服务名,以连接本地oracle数据库为例
app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle+cx_oracle://testdb:123456@localhost:1521/ORCL'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True  # 对模型修改监控的设置

app.config['SQLALCHEMY_ECHO'] = True  #查询时会显示原始SQL语句

db = SQLAlchemy(app)  # 初始化扩展,传入程序实例 app
3.创建数据库模型(db_try.py)
class User(db.Model):  # 表名将会是 user(自动生成,小写处理)
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(20))  # 名字


class Movie(db.Model):  # 表名将会是 movie
    id = db.Column(db.Integer, primary_key=True)  # 主键
    title = db.Column(db.String(60))  # 电影标题
    year = db.Column(db.String(4))  # 电影年份
4.建表
from db_try import db

# 建表
db.create_all()

在这里插入图片描述

(可以看到创建以后的表)

5.插入数据
# 插入数据
# user = User(id=1,name='Kimheel')
user1 = User(id=2,name='victoria')
user2 = User(id=3,name='heechul')


# m1 = Movie(id=1,title='Leon',year='1994')
# m2 = Movie(id=2,title='Lost Generation',year='2013')
m3 = Movie(id=3,title='Forrest Gump',year='1994')
m4 = Movie(id=4,title='exm',year='2014')


db.session.add(user1)
db.session.add(user2)


db.session.add(m3)
db.session.add(m4)


db.session.commit()

注意,如果建表没有设置自增,这里要自己输入id主键,且不能违反唯一性原则
在这里插入图片描述

(插入后数据如图所示)

6.查询
from sqlalchemy import and_
from db_try import User,Movie

movie = Movie.query.first()


print(movie.title)  # 查询第一条记录的结果
print(movie.year)


cc = Movie.query.all()
print(cc[1].title)  # 返回第一条记录的标题


print(Movie.query.count())   # 返回记录总条数


print(Movie.query.get(1).title)   # 返回主键值为1的记录


# 添加筛选进行查询(两种方式查询)
print(Movie.query.filter_by(title='Leon').first())


print(Movie.query.filter(Movie.id>2).all())


print(Movie.query.filter(and_(Movie.id>2,Movie.title.endswith('Gump'))).count())    # 需要导入_and

在这里插入图片描述
在这里插入图片描述

对应的输出结果

7.删除
movie = Movie.query.get(1)
db.session.delete(movie)  # 使用 db.session.delete() 方法删除记录,传入模型实例
db.session.commit()  # 提交改动
8.更新
movie = Movie.query.get(2)
movie.title = 'WALL-E'  # 直接对实例属性赋予新的值即可
movie.year = '2008'
db.session.commit()  # 注意仍然需要调用这一行来提交改动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值