本文介绍基于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']