1. 程式人生 > >Python學習之旅(三十八)

Python學習之旅(三十八)

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