# 原創,轉載請留言聯繫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()