Python學習之旅(三十八)
阿新 • • 發佈:2018-12-19
Python基礎知識(37):訪問資料庫(Ⅱ)
因臨近考試,本人即將進入複習階段,從明天12月19號至2019年的1月二十多號暫停更新
二、MySQL
MySQL是Web世界中使用最廣泛的資料庫伺服器。SQLite的特點是輕量級、可嵌入,但不能承受高併發訪問,適合桌面和移動應用。而MySQL是為伺服器端設計的資料庫,能承受高併發訪問,同時佔用的記憶體也遠遠大於SQLite。
可以直接從MySQL官方網站下載最新的Community Server 5.6.x版本。
由於Python的DB-API定義都是通用的,所以,操作MySQL的資料庫程式碼和SQLite類似。
三、SQLAlchemy
ORM技術:Object-Relational Mapping,把關係資料庫的表結構對映到物件上。
在Python中,最有名的ORM框架是SQLAlchemy。
可以通過pip安裝SQLAlchemy。
建立的user
表
#匯入 from sqlalchemy import Column, String, create_engine, ForeignKey from sqlalchemy.orm import sessionmaker, relationships from sqlalchemy.ext.declarative import declarative_base#建立物件的基類 Base = declarative_base() #定義User物件 class User(Base): #表的名字 __tablename__ = 'user' #表的結構 id = Column(String(20), primary_key=True) name = Column(String(20)) #初始化資料庫連線 engine = create_engine('mysql+mysqlconnector://root:[email protected]:3306/test') #建立DBSession型別 BDSession = sessionmaker(bind=engine)
create_engine()
用來初始化資料庫連線。SQLAlchemy用一個字串表示連線資訊。
由於有了ORM,向資料庫表中新增一行記錄,可以視為新增一個User
物件
#建立session物件 session =DBSsession() #建立新User物件 new_user = User(id='5', name='Bob') #新增到session session.add(new_user) #提交即儲存到資料庫 session.commit() #關閉session
從資料庫表中查詢資料,有了ORM,查詢出來的可以不再是tuple,而是User
物件。SQLAlchemy提供的查詢介面如下
# 建立Session: session = DBSession() # 建立Query查詢,filter是where條件,最後呼叫one()返回唯一行,如果呼叫all()則返回所有行: user = session.query(User).filter(User.id=='5').one() # 列印型別和物件的name屬性: print('type:', type(user)) print('name:', user.name) # 關閉Session: session.close()
由於關係資料庫的多個表還可以用外來鍵實現一對多、多對多等關聯,相應地,ORM框架也可以提供兩個物件之間的一對多、多對多等功能
class User(Base): __tablename__ = 'user' id = Column(String(20), primary_key=True) name = Column(String(20)) #一對多 books = relationship('Book') class Book(Base): __tablename__ = 'book' id = Column(String(20), primary_key=True) name = Column(String(20)) #book表通過外來鍵關聯到User表 user_id = Column(String(20), ForeignKey('user.id'))
當我們查詢一個User物件時,該物件的books屬性將返回一個包含若干個Book物件的list
資料來源:
1、廖雪峰學習官網
2、菜鳥教程:http://www.runoob.com/python3/python3-mysql.html