tornado之ORM框架基礎與操作
阿新 • • 發佈:2018-12-18
SQLAlchemy 是 python 中常用的 ORM 框架
ORM全稱 Object Relational Mapping物件關係對映
通過 ORM 可以不用關心後臺是使用的哪種資料庫,只需要按照 ORM 所提供的語法規則去書寫相應的程式碼, ORM 就會自動的轉換成對應對應資料庫的 SQL 語句
- SQLAlchemy連線資料庫
第一步:安裝
安裝: mysql
安裝python包: pymysql、sqlalchemy
pip安裝 python 包
pip install -i https://pypi.douban.com/simple pymysql
pip install -i
這裡是使用國內的源 - 第二步:匯入模組、建立資料庫模組、資料庫 URL、連線資料庫、測試連線是否OK
from sqlalchemy import create_engine
- 第三步:資料庫連線
connect.py
#匯入create_engine 的模組
from sqlalchemy import create_engine
#資料庫模組
HOSTNAME = '127.0.0.1'
PORT = '3306' #注意這個不是本地埠是指遠端資料庫埠,因為pycharm已經先SSH連線到本地了
DATABASE = 'mydb' #linux已經存在的database,沒有的話自己建立
USERNAME = 'admin'
PASSWORD = 'Root110qwe'
#資料連線 URL
Db_Uri = 'mysql+pymysql://{}:{}@{}/{}?charset=utf8'.format(
USERNAME,
PASSWORD,
HOSTNAME,
DATABASE,
)
#連線資料庫
engine = create_engine(Db_Uri)
#建立一個基類
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
#建立會話
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
#測試連線是否OK
if __name__=="__main__":
conection = engine.connect()
result = conection.execute('select 1')
print(result.fetchone())
- 剛才已經使用 SQLAlchemy 連上資料庫,現在該如何在資料庫裡面新建表呢?
- 第一步:建立 Module 的 Base 類,上面已經建立了基類
#建立一個基類
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(engine)
物件關係型對映,資料庫中的表與python中的類相對應,建立的類必須繼承自 sqlalchemy 中的基類。
使用 declarative 方法定義的對映類依據一個基類,這個基類是維繫類和資料表關係的目錄。
應用通常只需要有一個 Base 的例項。我們通過 declarative_base() 功能建立一個基類。
- 第二步:建立 Module
user_modules.py
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, Boolean
from data.connect import Base
#通過 SQLAlchemy 提供的語法來宣告User表,為了測試我修改為test表
class User(Base):
__tablename__ = 'test'
id = Column(Integer,primary_key=True,autoincrement=True)
username = Column(String(20),nullable=False)
password = Column(String(50))
creatime = Column(DateTime,default=datetime.now)
# _locked = Column(Boolean, default=False, nullable=False)
# __tablename__: 資料庫中的表名
# Column: 用來建立表中的欄位的一個方法
# Integer: 整形,對映到資料庫中的int型別
# String: 字元型別,對映到資料庫中的varchar型別,使用時,需要提供一個字元長度
# DateTime: 時間型別
def __repr__(self):
return """
<User(id:%s, username:%s, password:%s, creatime:%s)>
""" % (
self.id,
self.username,
self.password,
self.creatime
)
if __name__ =="__main__":
#執行此程式碼,就會把建立好的 Module 對映到資料庫中
Base.metadata.create_all()
再次強調,我們用類來表示資料庫裡面的表!!!
這些表的類都繼承於我們的Base基類。
在類裡面我們定義一些屬性,這個屬性通過對映,就對應表裡面的欄位
增刪改查
現在萬事具備,只需要往表中進行資料的更改即可,那改如何操作呢?第一步:建立會話
在對錶資料進行增刪改查之前,先需要建立會話,建立會話之後才能進行操作,就類似於檔案要開啟之後才能對檔案內容操作
在上面的connect.py我事先建立好了
#建立會話
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(engine)
session = Session()
- 建立test_modules.py實現增刪改查方法
from data.connect import session
from data.user_modules import User
def add_user():
# person = User(username='test1',password ='qwe123')
# session.add(person) #add 是新增一條資料, add_all 新增多條資料
persons = [
User(username='tuple', password='qwe123'),
User(username='list', password='qwe123'),
User(username='os', password='qwe123'),
]
session.add_all(persons) # add_all 新增多條資料
session.commit()
def search_user():
# rows = session.query(User).all()
rows = session.query(User).first()
print(rows)
def updata_user():
rows = session.query(User).filter(User.username == 'os').update({User.password: 1})
session.commit()
def delect_user():
rows = session.query(User).filter(User.username == 'list')[0]
print(rows)
session.delete(rows)
session.commit()
if __name__ =='__main__':
# add_user()
search_user()
updata_user()
delect_user()
query 就是查詢的意思,在 SQLAlchemy 中也用來查詢資料
all 是查詢所有的意思
first 是查詢第一條資料
看完之後需要掌握下面的操作
ORM 概念、連線 資料庫、建立 Module、建立會話基本的增刪改查
PS:
注意:想要from connect import Base不報錯(報錯時是可以執行程式碼的) 在data資料夾裡面右鍵 選中Mark directory as 選中sources root