sqlalchemy映射mysql_请教 sqlalchemy,如何根据映射类定义去创建表?

本文探讨了在Python中使用SQLAlchemy ORM框架如何在数据库不存在指定表的情况下创建表。首先介绍了Base、create_engine和session的设置,然后展示了如何定义一个映射类 tbl_mtLive。对于第一个问题,可以通过检查表是否存在,若不存在则使用`Base.metadata.create_all()`来创建表。第二个问题涉及遍历数据库中的所有表并执行更新操作,可以通过获取所有表名,然后针对每个表执行更新SQL。同时提出了对当前实现方法的疑虑。

如:

Base = declarative_base()

engine = create_engine("mysql+pymysql://root:[email protected]:3306/MTData?charset=utf8", echo=False)

Session = sessionmaker(bind=engine)

session = Session()

metadata = MetaData(engine)

class tbl_mtLive(Base):

__tablename__ = 'mtLive'

id = Column(INTEGER(64), primary_key=True)

timeline = Column(SMALLINT())

mtuptime = Column(SMALLINT())

mttext = Column(String(500))

mtstatus = Column(String(25))

Strtime = Column(String(25))

fixStrtime = Column(DateTime)

mtid = Column(String(10))

UpdateTime = Column(DateTime)

SQLTAG = Column(String(20))

MTData 库里面,除了 mtLive 还有 N 张表,

有些已经像 class tbl_mtLive(Base)这样“映射类定义”了,

有些则没有,

请教大家第一个问题是:如果 mtLive 这个表并没有建立,上面这种 ORM 的前提下,如何以 class tbl_mtLive 去创建表?

sqlalchemy 的文档看得眼都花了。。。-_-

第二个问题是:

想法是打算把库里面的全部表做一个历遍,

去执行

for i in #这个表集合如何获取?#

session.execute(f"update {i} set `{k}`='{v[0]}' where mtid = '{i.get('mtid')}' AND timeline = '{i.get('timeline')}'")

# 更新 UpdateTime

session.execute(f"update {i} set `UpdateTime`='{ProcFixTime()}' where mtid = '{i.get('mtid')}' AND timeline = '{i.get('timeline')}'")

看了网上的例子,文档和网上有很多的例子是用.cursors,.execute()执行了 SQL 语句,用.fetchall()的方获取到表名,然后开始 do something 的,

请问 ORM 方式是否有方法可以实现?如何做?

尽管在草拟这个帖子的前 1 小时,已经实现

tables = Base.metadata.tables

print(tables)

获得了表名,似乎觉得这样操作不是好办法。。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值