在Flask-web中使用原生的SQL语句 *** 作数据库可能会枯燥乏味,因为它本身也是很长的一段代码,这无形中增加了我们的代码量。
所以在Flask中为我们提供了一个数据包叫做Flask-SQLAlchemy它为开发人员提供了很强的灵活性,因为它集成了SQL的全部功能。可能一个多表查询语言原生SQL要写20个甚至30个字符,它10个就搞定了。
ORM:对象关系映射用简单的话来讲就是通过创建类的方式来创建表,我们开发人员用它规定的语法来创建表,它就会生成复杂的SQL语句
接下来我们用SQLAlchemy来创建一个User用户表
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
class Config:
SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1:3306/csdn' # 数据库连接地址
SQLALCHEMY_TRACK_MODIFICATIONS = False # 取消动态最终
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(30), nullable=False)
age = db.Column(db.Integer, nullable=False)
phone_num = db.Column(db.Integer, nullable=False)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
db.create_all()
app.run()
我们可以看到首先是导入数据包,再之后我会创建一个Config的类,它里面都是存放一些配置信息,这其中的两个配置信息是导入SQLAlchemy必须要的,不然会有警告提醒。
SQLALCHEMY_DATABASE_URI 这是指定数据库的位置和表的位置
连接数据库://用户名:密码@主机地址:端口号/数据库名
这是一个连接的格式,我用的mysql所以连接的是msyql
SQLALCHEMY_TRACK_MODIFICATIONS 这是是否开启动态追踪的意思,我们一般都是把他写为False
下面的User就是用对象创建一个表,首先这个表就要继承db.Model,表明这不是一个普通的类,
里面就是表的字段名和字段的类型。
像这里我定义了一个字段叫id、类型是Integer、primary_key是否设为主键、autoincrement是否 自增,这就是我设置第一个id字段。
这其中字段还有很多类型如:String,Text,Float,Boolean
最后在run之前 db.create_all() 创建所有的表,创建表就完成了。
下面是我在表里创建几个人的信息,我们来 *** 作一下它
一、查询比如有一个要求,我要查询王老五的id值,我只知道他叫王老五。
res = User.query.filter_by(name='王老五').first().id
print(res)
这就是一个查询语言,首先我要找User表里面的王老五,所以先写一个User,再是query查询,然后用filter_by过滤指定名字是王老五,再然后first生成一个对象,最后点它的id就拿到了王老五的id
所以把查询语言分解一下 ,如下就是查询语言的分解结构
二、增加模型类名.query.过滤器.查询执⾏行行器器
又来了一个要求,我要增加一个人,她叫王小美,18岁,手机号991。
# 第一个方法
new = User()
new.name = '王小美'
new.age = 18
new.phone_num = 99
db.session.add(new)
db.session.commit()
new = User(name='王小美', age=18, phone_num=991)
db.session.add(new)
db.session.commit()
一共有两种添加方式,第一个是先实例化,再用点属性的方式赋值,再添加最后提交。
第二是实例化时就给他传了参数。这两种方法都可以不过最后都要先添加再提交上去才有数据。
三、修改比如我要把王老五的手机号修改成520
res = User.query.filter_by(name='王老五').first()
res.phone_num = 520
db.session.commit()
我们还是要首先把王老五找到,生成个对象,在用点属性的方式把他的手机号修改了
四、删除
最后我们把王小美这个人删除了,就把王小美这个人的所有有关数据都删除了
res = User.query.filter_by(name='王小美').first()
db.session.delete(res)
db.session.commit()
和修改差不多都要先找到王小美这个人再生成一个对象,再用delete这个方法把这个对象删除
这就是关于单表 *** 作的增删改查,欢迎转载
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)