本文介紹基於Python ORM架構串連和使用寬表引擎的方法。
前提條件
已安裝Python環境,且Python為3.7及以上版本。
已開通MySQL協議相容功能。如何開通,請參見開通MySQL協議相容功能。
已將用戶端IP添加至白名單,具體操作請參見設定白名單。
操作步驟
執行以下命令,安裝MySQL資料庫連接模組PyMySQL。
pip install PyMySQL
執行以下命令,安裝Python的ORM架構SQLAlchemy。
pip install SQLAlchemy
配置串連參數。
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資料庫。
串連並使用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']