【Python入門】44.資料庫之 使用SQLAlchemy
*寫在前面:為了更好的學習python,博主記錄下自己的學習路程。本學習筆記基於ofollow,noindex">廖雪峰的Python教程 ,如有侵權,請告知刪除。歡迎與博主一起學習Pythonヽ( ̄▽ ̄)ノ *
目錄
資料庫
資料庫
使用SQLAlchemy
在Python中,我們要表示一個表格內容的話,可以用list表示,像這樣:
[ ('1', 'Ming'), ('2', 'Hong'), ('3', 'Leo') ]
這是一個user表,包含了id和name。
但是這樣用tuple表示一行,很難看出表的結構,我們可以class例項來表示:
class User(object): def __init__(self, id, name): self.id = id self.name = name [ User('1', 'Ming'), User('2', 'Hong'), User('3', 'Leo') ]
這種把關係資料庫的表結構對映到物件上的技術就是ORM(Object-Relational Mapping) 技術。
執行這種轉換的框架就是ORM框架。
SQLAlchemy就是一種ORM框架,我們來看一下如何使用SQLAlchemy。
首先,在命令提示符中輸入pip安裝SQLAlchemy:
pip install sqlalchemy
然後,我們試一下用SQLAlchemy來建立一個user表。
第一步,匯入SQLAlchemy:
from sqlalchemy import Column, String, create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base
第二步,建立User物件:
Base = declarative_base()# 建立物件的基類 class User(Base): __tablename__ ='user'# 表的名字 id = Column(String(20), primary_key=True)# 表的結構 name = Column(String(20))
這裡declarative_base()
是用來建立物件的基類。
第三步,初始化資料庫連線和DBSession:
engine = create_engine('mysql+pymysql://root:jianhui123@localhost:3306/test') DBSession = sessionmaker(bind=engine)
create_engine()
用來初始化資料庫連線,緊跟的字串含義為:
'資料庫型別+資料庫驅動名稱://使用者名稱:密碼@機器地址:埠號/資料庫名'
這裡只需要修改使用者名稱和密碼即可。
第四步,新增資料:
session = DBSession()# 建立session物件: new_user = User(id='4', name='Mike')# 建立User物件: session.add(new_user)# 把User物件新增到session中 session.commit()# 提交session session.close()
可以看到,我們想要新增資料的話,只需要建立對應的物件,然後新增到session中,最後把session提交併關閉即可。
至此,我們成功使用SQLAlchemy建立了一個user表。
如果想要查詢資料的話,可以通過query
查詢,具體如下:
session = DBSession() user = session.query(User).filter(User.id=='4').one() print(user.name) session.close()
這裡filter()
表示條件,one()
表示返回唯一行。
執行結果:
Mike
在關係資料庫中,會有一對多、多對多的關係,相應的,ORM框架也可以提供一對多、多對多等功能。
例如,在User表中,一個user有一個id、一個name和多個score,那麼可以這樣定義:
class User(Base): __tablename__ = 'user' id = Column(String(20), primary_key=True) name = Column(String(20)) score = relationship('Score')# 建立一對多關係 class Score(Base): __tablename__ = 'score' id = Column(String(20), primary_key=True) math_score = Column(Integer)# 數學成績 english_score = Column(Integer)# 英語成績 chinese_score = Column(Integer)# 語文成績 user_id = Column(String(20), ForeignKey('user.id'))# 通過外來鍵user_id連線到User表
當我們查詢一個User物件時,該物件的score屬性就會返回一個包含多個Score物件的list。
ORM框架的作用就是把資料庫表的每一行資料與每一個物件對應起來,互相轉換。
以上就是本節的全部內容,感謝你的閱讀。
下一節內容:Web開發
有任何問題與想法,歡迎評論與吐槽。
和博主一起學習Python吧( ̄▽ ̄)~*