1. 程式人生 > >tornado之ORM框架基礎與操作

tornado之ORM框架基礎與操作

SQLAlchemy 是 python 中常用的 ORM 框架
ORM全稱 Object Relational Mapping物件關係對映
通過 ORM 可以不用關心後臺是使用的哪種資料庫,只需要按照 ORM 所提供的語法規則去書寫相應的程式碼, ORM 就會自動的轉換成對應對應資料庫的 SQL 語句

  1. SQLAlchemy連線資料庫
    第一步:安裝
    安裝: mysql
    安裝python包: pymysql、sqlalchemy
    pip安裝 python 包
    pip install -i https://pypi.douban.com/simple pymysql
    pip install -i
    https://pypi.douban.com/simple
    sqlalchemy
    這裡是使用國內的源
  2. 第二步:匯入模組、建立資料庫模組、資料庫 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