【Python入門】44.資料庫之 使用SQLAlchemy
摘要:教你如何使用SQLAlchemy建立資料庫表
*寫在前面:為了更好的學習python,博主記錄下自己的學習路程。本學習筆記基於廖雪峰的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: [email protected]: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吧( ̄▽ ̄)~*