1. 程式人生 > >【Python入門】44.資料庫之 使用SQLAlchemy

【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吧( ̄▽ ̄)~*