You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中cursor.execute使用SUBSTR截取值失效及查询验证咨询

验证SQL截取时区逻辑的实用方法

首先得说,你当前Python代码里的参数写法有个隐患:SUBSTR('%s',24,6)是直接把row[1]拼进SQL字符串,不是真正的参数化绑定,这容易触发SQL语法错误(比如字符串里有单引号),还存在SQL注入风险。不过先回到你的核心需求——验证截取逻辑是否正确,给你几个靠谱的方法:

1. 先离线测试截取逻辑

把row[1]的实际值(比如'2016-01-12T14:29:31.000+02:00')单独拿出来,在Python里先测试截取效果,或者直接在MySQL客户端跑截取语句:

  • Python里测试:
    test_dt = '2016-01-12T14:29:31.000+02:00'
    # 注意Python字符串索引从0开始,23到29的切片正好是+02:00
    test_timezone = test_dt[23:29]
    print(test_timezone)  # 应该输出+02:00
    
  • MySQL客户端测试:
    SELECT SUBSTR('2016-01-12T14:29:31.000+02:00',24,6);
    

确认这个截取逻辑没问题后,再结合插入流程验证。

2. 打印要执行的SQL语句(仅用于测试)

在Python里把拼接后的SQL打印出来,复制到MySQL客户端执行,看插入结果是否符合预期:

csv_data = csv.reader(open('aaaa.csv'))
for row in csv_data:
    # 构造完整SQL(仅测试用,生产环境别这么写)
    sql = f"INSERT INTO time2(col1, EventTimeZone) VALUES('{row[0]}', SUBSTR('{row[1]}',24,6))"
    print(sql)
    # 可以先注释掉execute,先看SQL是否正确
    # cursor.execute(sql)

把打印的SQL拿到MySQL里跑,然后查询time2表,看EventTimeZone字段是不是+02:00。

3. 插入后直接查询验证

不管用哪种写法,插入完成后立刻查询对应记录,验证存储的时区值:

csv_data = csv.reader(open('aaaa.csv'))
for row in csv_data:
    cursor.execute('INSERT INTO time2(col1, EventTimeZone) VALUES(%s,SUBSTR(\'%s\',24,6))', (row[0],row[1]))
    # 插入后查询验证
    cursor.execute("SELECT EventTimeZone FROM time2 WHERE col1 = %s", (row[0],))
    stored_timezone = cursor.fetchone()[0]
    print(f"插入的col1值:{row[0]},存储的时区:{stored_timezone}")
    # 对比预期值
    expected_timezone = row[1][23:29]
    if stored_timezone == expected_timezone:
        print("✅ 时区截取正确!")
    else:
        print(f"❌ 截取错误,预期:{expected_timezone},实际:{stored_timezone}")

更推荐的写法:Python先处理再传入

其实没必要在SQL里做截取,直接在Python里处理好时区值,再参数化传入SQL,既安全又容易验证:

csv_data = csv.reader(open('aaaa.csv'))
for row in csv_data:
    # Python中完成截取
    event_timezone = row[1][23:29]
    # 提前验证截取结果
    print(f"处理后的时区:{event_timezone}")
    # 参数化插入,避免SQL注入
    cursor.execute('INSERT INTO time2(col1, EventTimeZone) VALUES(%s, %s)', (row[0], event_timezone))

这种方式你能直接看到处理后的时区值,插入后再查询验证也更简单。

内容的提问来源于stack exchange,提问作者luckyday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:07