peewee 有两种获取 crud 操作对应的 sql 语句的形式:
- 应用 logging,代理 peewee,以输入日志的形式打印 sql
- 拜访 modelinsert 等类实例的
__str__
办法
我当初要讲的是后者:
获取插入操作的 sql
def save_record(user_id: int, long_url: str, short_uuid: str) -> InsertResult: insert_obj = TinyUrl.insert( user_id=user_id, long_url=long_url, long_url_hash=md5_helper.get_string_md5(long_url), short_uuid=short_uuid ) sql = str(insert_obj) started_at = time.time() row_id = insert_obj.execute() ended_at = time.time() return InsertResult( tracks=[ DBCrudTrack( sql=sql, pay_time=ended_at - started_at ) ], row_id=row_id )
获取查问操作的 sql
def get_row_by_user_id_long_url_hash(user_id: int, long_url_hash: str) -> SelectResult: query: ModelSelect = TinyUrl.select().where( (TinyUrl.user_id == user_id) & (TinyUrl.long_url_hash == long_url_hash) ) sql = str(query) start_at = time.time() rows: list[dict] = list( query.dicts() ) end_at = time.time() return SelectResult( tracks=[ DBCrudTrack( sql=sql, pay_time=end_at - start_at ) ], rows=[ Row(**row) for row in rows ] )