摘要:教你如何使用SQLAlchemy創(chuàng)建數據庫表
*寫在前面:為了更好的學習python十兢,博主記錄下自己的學習路程。本學習筆記基于廖雪峰的Python教程肺缕,如有侵權狈涮,請告知刪除。歡迎與博主一起學習Pythonヽ( ̄▽ ̄)? *
目錄
數據庫
使用SQLAlchemy
數據庫
使用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)技術崇败。
執(zhí)行這種轉換的框架就是ORM框架。
SQLAlchemy就是一種ORM框架肩祥,我們來看一下如何使用SQLAlchemy后室。
首先,在命令提示符中輸入pip安裝SQLAlchemy:
pip install sqlalchemy
然后混狠,我們試一下用SQLAlchemy來創(chuàng)建一個user表咧擂。
第一步,導入SQLAlchemy:
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
第二步檀蹋,創(chuàng)建User對象:
Base = declarative_base() # 創(chuàng)建對象的基類
class User(Base):
__tablename__ ='user' # 表的名字
id = Column(String(20), primary_key=True) # 表的結構
name = Column(String(20))
這里declarative_base()
是用來創(chuàng)建對象的基類松申。
第三步,初始化數據庫連接和DBSession:
engine = create_engine('mysql+pymysql://root:jianhui123@localhost:3306/test')
DBSession = sessionmaker(bind=engine)
create_engine()
用來初始化數據庫連接俯逾,緊跟的字符串含義為:
'數據庫類型+數據庫驅動名稱://用戶名:密碼@機器地址:端口號/數據庫名'
這里只需要修改用戶名和密碼即可贸桶。
第四步,添加數據:
session = DBSession() # 創(chuàng)建session對象:
new_user = User(id='4', name='Mike') # 創(chuàng)建User對象:
session.add(new_user) # 把User對象添加到session中
session.commit() # 提交session
session.close()
可以看到桌肴,我們想要添加數據的話皇筛,只需要創(chuàng)建對應的對象,然后添加到session中坠七,最后把session提交并關閉即可水醋。
至此旗笔,我們成功使用SQLAlchemy創(chuàng)建了一個user表。
如果想要查詢數據的話拄踪,可以通過query
查詢蝇恶,具體如下:
session = DBSession()
user = session.query(User).filter(User.id=='4').one()
print(user.name)
session.close()
這里filter()
表示條件,one()
表示返回唯一行惶桐。
執(zhí)行結果:
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') # 創(chuàng)建一對多關系
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框架的作用就是把數據庫表的每一行數據與每一個對象對應起來,互相轉換扫尺。
以上就是本節(jié)的全部內容筋栋,感謝你的閱讀。
下一節(jié)內容:Web開發(fā)
有任何問題與想法正驻,歡迎評論與吐槽弊攘。
和博主一起學習Python吧( ̄▽ ̄)~*