全部產品
Search
文件中心

Lindorm:基於Python ORM架構的應用開發

更新時間:Jul 06, 2024

本文介紹基於Python ORM架構串連和使用寬表引擎的方法。

前提條件

操作步驟

  1. 執行以下命令,安裝MySQL資料庫連接模組PyMySQL。

    pip install PyMySQL
  2. 執行以下命令,安裝Python的ORM架構SQLAlchemy。

    pip install SQLAlchemy
  3. 配置串連參數。

    engine = create_engine('mysql+pymysql://<user>:<password>@<lindorm_mysql_addr>:33060/<database>', echo=True)

    參數說明

    參數

    說明

    user

    如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改密碼。具體操作,請參見修改使用者密碼

    password

    lindorm_mysql_addr

    Lindorm寬表引擎的MySQL相容地址。如何擷取,請參見查看串連地址

    重要
    • 如果應用部署在ECS執行個體,建議您通過專用網路訪問Lindorm執行個體,可獲得更高的安全性和更低的網路延遲。

    • 如果應用部署在本地,在通過公網串連Lindorm執行個體前,需在控制台開通公網地址。開通方式:在控制台選擇資料庫連接 > 寬表引擎,在寬表引擎頁簽單擊開通公網地址

    • 通過專用網路訪問Lindorm執行個體,lindorm_mysql_addr請填寫MySQL相容地址對應的專用網路地址。通過公網訪問Lindorm執行個體,lindorm_mysql_addr請填寫MySQL相容地址對應的公網地址。

    database

    需要串連的資料庫名稱。預設串連default資料庫。

  4. 串連並使用Lindorm寬表引擎。以建立表並插入資料為例。

    #建表
    Base.metadata.create_all(engine)
    
    #建立session對象:
    session = Session()
    #建立Player對象:
    new_player = Player(player_id = 1001, player_name = "john", player_height = 2.08)
    #寫入到Lindorm
    session.add(new_player)
    #寫入多條資料到Lindorm
    session.add_all([
        Player(player_id=1002, player_name="bob", player_height=1.65),
        Player(player_id=1003, player_name="smith", player_height=1.82),
    ])
    session.commit()

完整樣本

完整範例程式碼如下:

from sqlalchemy import create_engine
from sqlalchemy import Column, String, Integer, Float
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import sessionmaker


Base = declarative_base()
# 定義 Player 對象:
class Player(Base):
    # 表的名字:
    __tablename__ = 'player'
    # 表的結構:
    player_id = Column(Integer, primary_key=True,autoincrement=False)
    player_name = Column(String(255))
    player_height = Column(Float)
    def __str__(self):
        return " ".join(str(item) for item in (self.player_id,self.player_name,self.player_height))


# 初始化資料庫連接,請根據實際情況修改串連參數
engine = create_engine('mysql+pymysql://user:test@ld-bp1l39h99192d****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/default', echo=True)
Session = sessionmaker(bind=engine)

#建表
Base.metadata.create_all(engine)

# 建立session對象:
session = Session()
# 建立Player對象:
new_player = Player(player_id = 1001, player_name = "john", player_height = 2.08)
# 寫入到Lindorm
session.add(new_player)
# 寫入多條資料到Lindorm
session.add_all([
    Player(player_id=1002, player_name="bob", player_height=1.65),
    Player(player_id=1003, player_name="smith", player_height=1.82),
])
session.commit()

# 查詢player_id為1001的資料
rows = session.query(Player).filter(Player.player_id == 1001).all()
print([row.__str__() for row in rows])


# 刪除player_id為1002的資料
session.query(Player).filter(Player.player_id == 1002).delete()
session.commit()

# 更新player_id為1003的資料
session.query(Player).filter(Player.player_id == 1003).update({"player_name":"brown"})
session.commit()

# 查詢所有資料
rows = session.query(Player).all()
print([row.__str__() for row in rows])

執行成功後將返回如下查詢結果

['1001 john 2.08']
['1001 john 2.08', '1003 brown 1.82']