91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python連接數據庫操作sqlalchemy的方式

發布時間:2020-10-26 10:50:31 來源:億速云 閱讀:609 作者:小新 欄目:編程語言

這篇文章主要介紹python連接數據庫操作sqlalchemy的方式,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

sqlalchemy是什么呢?其實它就是一個程序,是經常使用的關系程序,應用十分廣泛,所以學習好sqlalchemy是非常重要的,結合知識點以及下面示例,很輕松的學會這部分內容。

1、ORM框架

常見的ORM框架

1)SQLAlchemy:SQLAlchemy

2)SQLObject

3)Storm

4)Django's ORM

2、SQLAlchemy介紹

sqlalchemy是Python ORM的開源框架,使用它可以快速方便的構建數據庫模型。

SQLALchemy本身無法操作數據庫,需要依賴pymysql第三方模塊,Dialect用于和數據API進行交流,根據配置文件的不同調用不同的數據庫API,從而實現對數據庫的操作

使用pymysql連接數據庫格式:

mysql + pymysql: / / <username>:<password>@<host> / <dbname>[?<options>]

3、安裝SQLAlchemy與檢查是否安裝成功

#安裝
pip install SQLAlchemy
#檢查是否安裝成功
C:\Users\lsl\Desktop>python
Python 3.7.0rc1 (v3.7.0rc1:dfad352267, Jun 12 2018, 07:05:25) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlalchemy
>>> sqlalchemy.__version__
'1.3.18'復制代碼

4、使用SQLAlchemy操作數據庫的表——創建對象

from sqlalchemy import create_engine
# 連接本地test數據庫
engine = create_engine('mysql+pymysql://root:root@localhost:3306/testdab',#數據庫類型是mysql,采用pymysql數據庫驅動來連接,用戶名是root,密碼也是root,連接本地數據庫testdab(連接的數據庫要是已存在的,就是你本地已有的數據庫)
                       encoding='utf-8',  # 編碼格式
                       echo=True,  # 是否開啟sql執行語句的日志輸出
                       pool_recycle=-1,  # 多久之后對線程池中的線程進行一次連接的回收(重置) (默認為-1),其實session并不會被close
                       poolclass=NullPool  # 無限制連接數
                       )復制代碼

5、簡單查詢——使用SQL語句

result = engine.execute("select * from students")//在execute()里的參數是查詢的sql語句
print(result.fetchall()) //打印出查詢的結果復制代碼

6、創建映射

創建一個py文件來做數據表的映射text2.py

#引入要使用的declarative_base
from sqlalchemy.ext.declarative import declarative_base
#在要映射的數據表students中有id,name兩個字段,所以要引入Integer對應id,String對應name
from sqlalchemy import Column, Integer, String
#聲名Base
Base = declarative_base()
#User類就是對應于 __tablename__ 指向的表,也就是數據表students的映射
class User(Base):
#students表是我本地數據庫testdab中已存在的
    __tablename__ = 'students'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(64),nullable=False)
    __table_args__ = {
        "mysql_charset": "utf8"
}復制代碼

7、查詢

查詢students表中所有的數據

result = mySession.query(News).all()
print(result[0])復制代碼

查詢students表中第一條數據

result = mySession.query(User).first()
print(result.name) #打印對象屬性復制代碼

通過id查詢數據(id=2)

result = mySession.query(User).filter_by(id=2).first()
print(result.name)復制代碼

自定義過濾條件

result = mySession.query(User).filter(text("id>:id")).params(id=2).all()復制代碼

根據主鍵查詢

result = mySession.query(User).get(2)復制代碼

8、增加數據

user = User(name="小紅")
mySession.add(user)
mySession.commit()
復制代碼

9、刪除數據

mySession.query(User).filter(User.id == 1).delete()
mySession.commit()復制代碼

10、修改數據

mySession.query(User).filter(User.name=="小紅").update({"name":"小白"})
mySession.commit()復制代碼

11、常用條件查詢代碼

表名:User
 
1.條件查詢
session.query(User).filter(User.name=='張三'){
                                               .all()   查詢所有
                                               .one()   查詢單個(如果存在多個會異常)
                                               .first() 查詢符合條件的第一個
                                               .limit(1).one() limit限制查詢,limit(1).one()升級第一個
                                               .count()  查詢符合條件的總個數
                                               }
 
2.主鍵查詢
session.query(User).get(0)  查詢主鍵ID=0
 
3.offset(n) 限制前面n個,顯示后面n+1個
#查詢出第三個后面的所有
session.query(User).offset(3).all()
 
4.slice()切片
#slice(1,3) 與python的slice一致,從0開始 左閉右開,顯示1,2兩個元素
session.query(User).slice(1,,3).all()
 
5.order_by() 默認升序
session.query(User).order_by(User.id).all()
 
6.desc() 降序
session.query(User).order_by(desc(User.id)).all()
 
7.like 模糊匹配,與sql一樣
session.query(User).filter(User.neme.like('%吳')).add()
 
8.notlike 與7相反
 
 
form operator import *
 
9.in_() 包含
#查詢是否包含唐人、吳新喜這個用戶的信息
session.query(User).filter(User.name.in_(['唐人','吳新喜'])).all()
 
 
10.notin_() 不包含
 
11.is_  兩種表達方式 None
#查詢所有手機號為null的信息
session.query(User).filter(User.phone==None).all()
session.query(User).filter(User.phone.is_(None)).all()
 
12. isnot()
 
13. or_ 條件或者關系
#查詢name==吳新喜或者唐人的用戶信息
session.query(User).filter(or_(User.name=='唐人',User.name=='吳新喜'))
 

聚合函數
 
1.count group_by
#查詢所有的密碼并且計算其相同的個數
from sqlalchemy import func
ssession.query(db_user.psw,func.count(db_user.psw)).group_by(db_user.psw).all()
 
2.having
having字句可以讓我們篩選成組后的各種數據,where字句在聚合前先篩選記錄,也就是說作用在group by和having字句前。
而having子句在聚合后對組記錄進行篩選。真實表中沒有此數據,這些數據是通過一些函數生存。
即先成組在篩選
 
#查詢所有的密碼并且計算其相同的個數,having條件相同密碼總數大于1的數據
ssession.query(db_user.psw,func.count(db_user.psw)).group_by(db_user.psw).having(func.count(db_user.psw)>1).all()
 
3.sum
#計算所有id的總和
ssession.query(func.sum(db_user.id)).all()
 
4.max
#最大的ID
 ssession.query(func.max(db_user.id)).all()
 
5.min
#最小的id
 ssession.query(func.min(db_user.id)).all()
 
6.lable 別名
lable別名不能用在having中
 
7.extract 提取時間元素
from sqlalchemy import extract復制代碼

流程總代碼:

#import
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import NullPool
 
#創建連接對象也就是為了連接到本地的數據庫
engine = create_engine('mysql+pymysql://root:root@localhost:3306/testdab',
                       encoding='utf-8',  # 編碼格式
                       echo=True,  # 是否開啟sql執行語句的日志輸出
                       pool_recycle=-1,  # 多久之后對線程池中的線程進行一次連接的回收(重置) (默認為-1),其實session并不會被close
                       poolclass=NullPool  # 無限制連接數
                       )
#聲名Base
Base = declarative_base()
 
# 創建會話
session = sessionmaker(engine)
mySession = session()
 
# 創建類,繼承基類,用基本類型描述數據庫結構
class User(Base):
    __tablename__ = 'students'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(64),nullable=False)
    __table_args__ = {
        "mysql_charset": "utf8"
    }
#sql語句查詢
result = engine.execute("select * from students")
print(result.fetchall())
 
# 查詢第一條
result = mySession.query(User).first()
print(result.name) #打印對象屬性
 
# 查詢所有
result = mySession.query(User).all()
print(result[0])
 
# 查詢id為2的
result = mySession.query(User).filter_by(id=2).first()
print(result.name)
 
# 分頁查詢 0,2
result = mySession.query(User).filter(User.id>1).limit(2).offset(0).all()
print(result)
 
#插入新數據
user = User(name="小紅")
mySession.add(user)
mySession.commit()
result = mySession.query(User).filter_by(name="小紅").first()
print(result.name)
 
 
#修改已有數據
mySession.query(User).filter(User.name=="小紅").update({"name":"小白"})
mySession.commit()
result = mySession.query(User).filter_by(name="小白").first()
print(result.name)
 
#刪除數據
mySession.query(User).filter(User.id == 1).delete()
mySession.commit()
result = mySession.query(User).first()
print(result.name) #打印對象屬性復制代碼

以上是python連接數據庫操作sqlalchemy的方式的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔西县| 棋牌| 潮安县| 韩城市| 达日县| 台北市| 陈巴尔虎旗| 依安县| 东丽区| 青川县| 湘乡市| 尚志市| 合山市| 马公市| 湖南省| 石泉县| 云霄县| 黄石市| 米脂县| 奈曼旗| 衡南县| 赤壁市| 永善县| 盐池县| 黄龙县| 泸西县| 城步| 巴楚县| 北安市| 滁州市| 绍兴市| 连城县| 阜平县| 曲麻莱县| 始兴县| 灵寿县| 荣昌县| 宁海县| 松原市| 荥经县| 昔阳县|