From 26b6fa9c1a2f68a1d513e9a0a95853759d975f27 Mon Sep 17 00:00:00 2001 From: xst Date: Tue, 8 Sep 2026 11:53:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(api):=20ETC=20=E5=8F=91=E7=A5=A8=20INSERT?= =?UTF-8?q?=20=E4=B8=AD=20URL=20=E7=AD=BE=E5=90=8D=20%3D=20=E5=9C=A8?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=8C=96=20SQL=20=E4=B8=8B=E6=8C=89=20%%=20?= =?UTF-8?q?=E8=BD=AC=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pymysql 执行 sql % params 时把字面量 %3D 当作格式符,抛 unsupported format character 'D' (index 906)。参数化模板中的字面量 百分号必须写成 %%,渲染后仍为 %3D,与旧工具 f-string 产出的 SQL 一致。 已用 pymysql 同款插值离线验证全部 7 类模板渲染通过。 --- tests/apis/yun8/sql_templates.py | 5 ++++- tests/config/test_config.yaml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/apis/yun8/sql_templates.py b/tests/apis/yun8/sql_templates.py index 0204ba0..d2a002c 100644 --- a/tests/apis/yun8/sql_templates.py +++ b/tests/apis/yun8/sql_templates.py @@ -56,7 +56,10 @@ ETC_INVOICE_INSERT_SQL = ( "%s, %s, " "%s, %s, %s, 0.03, 0.03, " "'征税发票', '*', %s, '2026-05-13 15:35:38', '2026-05-15 13:35:43', " - "'https://hdfs.txffp.com/e/1102e1en66nPPP1ChAeC161e1C6Pei16.zip?Expires=1812122633&OSSAccessKeyId=LTAIYAJbICRhyCD8&Signature=TLjlHgKtCxwWpPliPRQ0xQ6HdKY%3D', " + # 注意: URL 签名中的 % 必须写成 %%(参数化 SQL 里 % 是格式转义符), + # 经 pymysql 渲染后仍为 %3D;写成单个 % 会在 execute 时抛 + # "unsupported format character 'D'" + "'https://hdfs.txffp.com/e/1102e1en66nPPP1ChAeC161e1C6Pei16.zip?Expires=1812122633&OSSAccessKeyId=LTAIYAJbICRhyCD8&Signature=TLjlHgKtCxwWpPliPRQ0xQ6HdKY%%3D', " "'https://gateway.txffp.com/alle/common/htmlurl/getinvoice/41012526221804003093/1102e1en66nPPP1ChAeC161e1C6Pei16', " "%s, %s, %s, " "0, 'etc开票申请2026070604', '冀D8E016', 3, 0, " diff --git a/tests/config/test_config.yaml b/tests/config/test_config.yaml index 6787fb3..d35cf7e 100644 --- a/tests/config/test_config.yaml +++ b/tests/config/test_config.yaml @@ -178,7 +178,7 @@ yun8_api: # 授权 Token(CLI --auth-driver / --auth-admin 可覆盖) tokens: driver_token: "Bearer YQZOMJWOYljNZJGN0XT23kFONQJZmDRNlm20lTTYYAUY4YjhiZTj0cDlhDjw" # 司机端 Bearer token (含 Bearer 前缀) - admin_token: "Bearer Z=BZ1gdZYkDN2Ij4kzTw3EGN0GnN2TYYhJcMzQmYNUZNNEWZjNWwmTTOhQD=" # 管理端 Bearer token (含 Bearer 前缀) + admin_token: "Bearer ODQOORZNlTTZyIWl0DTMMJIZMdX0yEDOYkjkyGmjlZQMZFWOjZlYjDGk0U==" # 管理端 Bearer token (含 Bearer 前缀) # 司机端固定参数(装货/卸货) driver_params: