# 原创,转载请留言联系python
用 sqlalchemy 添加数据时,必定要注意,不单单要链接到数据表,而且你的建立表的类也必须写进来。并且字段和约束条件要吻合,否则会报错的。web
sqlalchemy插入数据的格式通常是这样:sql
变量=建立表的类(字段名1=要插入的数据1,字段名2=要插入的数据2,...) # 例以下面的18行数据库
orm 框架的操做对象.session.add(变量) # 例以下面的19行。add 也有另外一种用法,见25行flask
orm 框架的操做对象.session.commit( ) # 例以下面的20行session
注意:flask 默认开启事务,因此操做完成后要 commit 才能提交到数据库。app
1 from flask import Flask 2 from flask_sqlalchemy import SQLAlchemy 3 4 app=Flask(__name__) 5 6 app.config['SQLALCHEMY_DATABASE_URI'] = '数据库类型://数据库登陆名:数据库登陆密码@数据库的地址:数据库的端口/数据库的名字' 7 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 8 app.config['SQLALCHEMY_ECHO'] = True 9 db = SQLAlchemy(app) 10 11 class Role(db.Model): 12 __tablename__ = "my_table" # 写表名 13 id = db.Column(db.INTEGER,primary_key=True) # 这行不能删 14 name = db.Column(db.String(10),nullable=False) # 这行也是 15 16 @app.route("/") 17 def index(): 18 r1 = Role(name="用户1") 19 db.session.add(r1) 20 db.session.commit() # flask默认使用事务,因此每一次操做都要提交事务 21 22 r2 = Role(name="用户2") 23 r3 = Role(name="用户3") 24 r4 = Role(name="用户4") 25 db.session.add_all([r2,r3,r4]) #多行时能够用session.add_all([x,x,x]) 26 db.session.commit() 27 return "hello" 28 29 if __name__ == '__main__': 30 app.run(debug=True)
注意:上面的代码,每刷新一次主页,就会增长4条数据进 my_table 表。(由于插入的语句写在视图函数里面。)框架
查询数据的用法比较复杂,因此最好举例子说明。ide
1.查询所有的用户函数
user = User.query.all()
注:User 是建立表的类,这里替表明来使用。
all( ) 就是查询全部的,也能够查询第一个的,用 first( ) 。
返回的结果 user 实际上是一个列表,里面的每个元素都是一行数据。有点抽象,你能够想象成一个表插分红一行一行的,而后放在列表里。
2.查询 id 是 1 的用户的名字
user = User.query.filter(User.id == 1).first()
user.name
注:filter 是一个过滤器,里面写条件,至关与SQL语句的 where 。可是注意字段名前要写建立表的类。
还须要注意的是有两个等于号 ==
若是 id 是主键的话,还能够这样:
user = User.query.get(1)
注
3.其余:
#查询有多少个用户 count = User.query.count() print(count) # 查询第一个用户 first_user = User.query.first() print(first_user) # 查询id为4的用户信息(方式1,最经常使用) fourth_user = User.query.filter(User.id==4).all() print(fourth_user) # 查询id为4的用户信息(方式2) fourth_user = User.query.get(4) print(fourth_user) # 查询id为4的用户信息(方式3) fourth_user = User.query.filter_by(id=4).all() print(fourth_user) # 查询名字结尾字符为g的全部数据 endwithg = User.query.filter(User.name.endswith("g")).all() print(endwithg) # 查询名字开头字符为g的全部数据 startwithg = User.query.filter(User.name.startswith("z")).all() print(startwithg) # 查询名字不等于wang的全部数据[2种方式] notwang = User.query.filter(User.name != "wang").all() # 最经常使用 print(notwang) notwang = User.query.filter(not_(User.name == "wang")).all() print(notwang) # 查询名字和邮箱都以 li 开头的全部数据[2种方式] userdd = User.query.filter(User.name.startswith("li"),User.email.startswith("li")).all() #常见 print(userdd) userdd = User.query.filter(and_(User.name.startswith("li"),User.email.startswith("li"))).all() print(userdd) # 查询password是`123456`或者`email`以`itheima.com`结尾的全部数据 user = User.query.filter(or_(User.password == "123456",User.email.endswith("itheima.com"))).all() print(user) # 查询id为[1, 3, 5, 7, 9]的用户列表 # SQL语句中范围查询 in # flask中 模型类名.字段.in_(列表) list1 = [1,3,5,7,9] user = User.query.filter(User.id.in_(list1)).all() print(user) # 查询全部用户数据,并以邮箱排序 user = User.query.order_by(User.id).all() #顺序 print(user) user = User.query.order_by(User.id.desc()).all() # 倒序,字段名后加desc() print(user) # 每页3个,查询第2页的数据 # ret = paginate(页码,每一页的数据量) ret = User.query.paginate(2,3) print(ret.page) print(ret.items)
注意:用到not_,or_,and_ 要导入!!!
from sqlalchemy import not_,or_,and_
sqlchemy 修改和删除数据都是基于查询上的。咱们必须先查出数据,all()是查出一行一行数据的列表,first()是查出第一行数据。必定要有这种查出来是一行的思想,才能更好的学习ORM。
user = User.query.first()
user.name = 'dong'
db.session.commit()
user = User.query.first() db.session.delete(user) db.session.commit()
还有另外一种方式:
User.query.first().delete() db.session.commit()
# 查询名字结尾字符为g的全部数据[开始/包含]
endwithg = User.query.filter(User.name.endswith("g")).all()