Python基礎知識(37):訪問資料庫(Ⅱ) 因臨近考試,本人即將進入複習階段,從明天12月19號至2019年的1月二十多號暫停更新 二、MySQL MySQL是Web世界中使用最廣泛的資料庫伺服器。SQLite的特點是輕量級、可嵌入,但不能承受高併發訪問,適合桌面和移動應用。而MySQL是為服務 ...
Python基礎知識(37):訪問資料庫(Ⅱ)
二、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:password@localhost: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