主頁 > 資料庫 > SQLAlchemy

SQLAlchemy

2020-09-13 01:33:08 資料庫

         

SQLAlchemy安裝

  1. 安裝  
  2. pip install sqlalchemy -i https://pypi.douban.com/simple  
  3. 連接的時候依賴pymysql  

通過SQLAlchemy連接資料庫

  1. from sqlalchemy import create_engine  
  2.         
  3. 資料庫的配置變數  
  4. HOSTNAME = '127.0.0.1'  
  5. PORT     = '3306'  
  6. DATABASE = 'xt_flask'  
  7. USERNAME = 'root'  
  8. PASSWORD = 'root'  
  9. DB_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)  
  10.         
  11. 創建資料庫引擎  
  12. engine = create_engine(DB_URI)  
  13.         
  14. #創建連接  
  15. with engine.connect() as con:  
  16.     rs = con.execute('SELECT 1')  
  17.     print rs.fetchone()  
  18.         
  19. 首先從sqlalchemy中匯入create_engine,用這個函式來創建引擎,然后用engine.connect()來連接資料庫,其中一個比較重要的一點是,通過create_engine函式的時候,需要傳遞一個滿足某種格式的字串,對這個字串的格式來進行解釋:  
  20.         
  21. dialect+driver://username:password@host:port/database  
  22. dialect是資料庫的實作,比如MySQLPostgreSQLSQLite,并且轉換成小寫,driverPython對應的驅動,如果不指定,會選擇默認的驅動,比如MySQL的默認驅動是MySQLdbusername是連接資料庫的用戶名,password是連接資料庫的密碼,host是連接資料庫的域名,port是資料庫監聽的埠號,database是連接哪個資料庫的名字,  
  23.         
  24. 如果以上輸出了1,說明SQLAlchemy能成功連接到資料庫,  

SQLAlchemy引數

  1. Column常用引數:  
  2.     default:默認值,  
  3.     nullable:是否可空,  
  4.     primary_key:是否為主鍵,  
  5.     unique:是否唯一,  
  6.     autoincrement:是否自動增長,  
  7.     onupdate:更新的時候執行的函式,  
  8.     name:該屬性在資料庫中的欄位映射,  
  9.         
  10. sqlalchemy常用資料型別:  
  11.     Integer:整形,  
  12.     Float:浮點型別,  
  13.     Boolean:傳遞True/False進去,  
  14.     DECIMAL:定點型別,  
  15.     enum:列舉型別,  
  16.     Date:傳遞datetime.date()進去,  
  17.     DateTime:傳遞datetime.datetime()進去,  
  18.     Time:傳遞datetime.time()進去,  
  19.     String:字符型別,使用時需要指定長度,區別于Text型別,  
  20.     Text:文本型別,  
  21.     LONGTEXT:長文本型別,  
  22.         
  23. query可用引數:  
  24.     模型物件,指定查找這個模型中所有的物件,  
  25.     模型中的屬性,可以指定只查找某個模型的其中幾個屬性,  
  26.     聚合函式,  
  27.     func.count:統計行的數量,  
  28.     func.avg:求平均值,  
  29.     func.max:求最大值,  
  30.     func.min:求最小值,  
  31.     func.sum:求和,  

     

創建表

  1. # -*- coding: utf-8 -*-  
  2. from sqlalchemy.ext.declarative import declarative_base  
  3. from sqlalchemy import Column #   
  4. from sqlalchemy import Integer, String  # 屬性  
  5.             
  6. Base = declarative_base()  # django models  
  7.             
  8. 創建表  
  9. class User(Base):  
  10.     __tablename__ = 'user'  
  11.     id = Column(Integer, primary_key=Trueautoincrement=True)  
  12.     name = Column(String(32), index=Truename='名字')  
  13.             
  14.             
  15. 資料庫連接  
  16. from sqlalchemy import create_engine  
  17. engine = create_engine("mysql+pymysql://root:[email protected]:3306/my_sql?charset=utf8")  
  18.             
  19. engine資料庫中創建所有繼承Base的表  
  20. Base.metadata.create_all(engine)  

         

增加資料

  1. # -*- coding: utf-8 -*-  
  2. from .create import engine, User  
  3. 增加資料  
  4. 創建會話視窗  
  5. from sqlalchemy.orm import sessionmaker  
  6. Session = sessionmaker(engine)  
  7. 打開會話視窗  
  8. db_session = Session()  
  9.             
  10. # ---單條資料  
  11. user_obj = User(name='Ywb')  # 實體化  
  12. db_session.add(user_obj) # 相當于 insert into  
  13.             
  14. 執行會化視窗中的所有操作  
  15. db_session.commit()  
  16. db_session.close()  
  17.             
  18. # ---增加批量資料  
  19. db_session.add_all([  
  20.     User(name='peach'),  
  21.     User(name='小紅')  
  22. ])  
  23.             
  24. db_session.commit()  
  25. db_session.close()  
  26.             
  27. # ---擴展  
  28. user1 = User(name='11')  
  29. user2 = User(name='12')  
  30. user3 = User(name='13')  
  31. user4 = User(name='14')  
  32. db_session.add(user1)  
  33. db_session.add(user2)  
  34. db_session.add(user3)  
  35. db_session.add(user4)  
  36. db_session.commit()  # 全部添加進去  
  37. db_session.close()  

         

過濾

  1. 過濾是資料提取的一個很重要的功能,以下對一些常用的過濾條件進行解釋,并且這些過濾條件都是只能通過filter方法實作的:  
  2.         
  3. equals  
  4. query.filter(User.name == 'ed')  
  5.         
  6. not equals:  
  7. query.filter(User.name != 'ed')  
  8.         
  9. like  
  10. query.filter(User.name.like('%ed%'))  
  11.         
  12. in  
  13. query.filter(User.name.in_(['ed','wendy','jack']))  
  14. 同時,in也可以作用于一個Query  
  15. query.filter(User.name.in_(session.query(User.name).filter(User.name.like('%ed%'))))  
  16.         
  17. not in  
  18. query.filter(~User.name.in_(['ed','wendy','jack']))  
  19.         
  20. is null  
  21. query.filter(User.name==None)  
  22. 或者是  
  23. query.filter(User.name.is_(None))  
  24.         
  25. is not null:  
  26. query.filter(User.name != None)  
  27. 或者是  
  28. query.filter(User.name.isnot(None))  
  29.         
  30. and  
  31. from sqlalchemy import and_  
  32. query.filter(and_(User.name=='ed',User.fullname=='Ed Jones'))  
  33. 或者是傳遞多個引數  
  34. query.filter(User.name=='ed',User.fullname=='Ed Jones')  
  35. 或者是通過多次filter操作  
  36. query.filter(User.name=='ed').filter(User.fullname=='Ed Jones')  
  37.         
  38. or  
  39. from sqlalchemy import or_    
  40. query.filter(or_(User.name=='ed',User.name=='wendy')) 

     

單表查詢

  1. # -*- coding: utf-8 -*-  
  2. 單表查詢  
  3. from sqlalchemy.orm import sessionmaker  
  4. from SQLAlchemy.create import engine, User  
  5. Session = sessionmaker(engine)  
  6. db_session = Session()  
  7.             
  8. # ---基本查詢  
  9. # select * from name  
  10. user_list = db_session.query(User)  
  11. print(user_list)  # SELECT user.`名字` AS `user_名字`, user.id AS user_id FROM user  
  12.             
  13. # ---------------- 所有資料 ------------------  
  14. user_list = db_session.query(User).all() # [obj, obj]  
  15. for usr in user_list:  
  16.     print(usr.name)  
  17.             
  18. # ---------------- 一條資料 ------------------  
  19. user = db_session.query(User).first() # obj  
  20. print(user.name)  
  21.             
  22.             
  23. # ---------------- 帶條件查詢 ------------------  
  24. # --- filter  
  25. user_list = db_session.query(User).filter(User.id==2).all()  # [obj, obj]  
  26. print(user_list)  
  27.             
  28. user_list = db_session.query(User).filter(User.id >= 1).all() # [obj, obj]  
  29. for user in user_list:  
  30.     print(user.id) # 按照id排序,因為添加是id  
  31.             
  32. # --- filter_by  
  33. user = db_session.query(User).filter_by(id=2).first()  # obj  
  34. print(user)  
  35.             
  36. # --- 擴展-查看sql陳述句  
  37. sql = db_session.query(User).filter(User.id >= 1)  
  38. print(sql)  
  39. """  
  40. SELECT user.`名字` AS `user_名字`, user.id AS user_id   
  41. FROM user   
  42. WHERE user.id >= %(id_1)s  
  43. """  

       

修改

  1. # -*- coding: utf-8 -*-  
  2. 更新修改資料  
  3. from sqlalchemy.orm import sessionmaker  
  4. from SQLAlchemy.create import engine,User  
  5. Session = sessionmaker(engine)  
  6. db_session = Session()  
  7.           
  8. 單條修改  
  9. # update `uesr` set `name` = 'haha' where id =1  
  10. res = db_session.query(User).filter(User.id==1).update({  
  11.     "name": 'haha'  
  12. })  
  13.           
  14. print(res)  # 回傳影響的行數  
  15. db_session.commit()  
  16. db_session.close()  
  17.           
  18. 批量修改  
  19. res = db_session.query(User).filter(User.id > 1).update({  
  20.     "name": "1234"  
  21. })  
  22.           
  23. print(res)  
  24. db_session.commit()  
  25. db_session.close()  

       

洗掉

  1. # -*- coding: utf-8 -*-  
  2. 洗掉資料  
  3. from sqlalchemy.orm import sessionmaker  
  4. from SQLAlchemy.create import engine,User  
  5. Session = sessionmaker(engine)  
  6. db_session = Session()  
  7.           
  8. 洗掉單條  
  9. # delete from user where id = 1  
  10. res = db_session.query(User).filter(User.id==1).delete()  
  11. print(res)  # 回傳影響的行數  
  12. db_session.commit()  
  13. db_session.close()  
  14.           
  15.           
  16. 洗掉多條  
  17. res = db_session.query(User).filter(User.name=="12345").delete()  
  18. print(res)  
  19. db_session.commit()  
  20. db_session.close()  

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/18452.html

標籤:SQL Server

上一篇:SqlServer操作大容量資料

下一篇:sql server

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more