【问题标题】:cursor.execute value sub string does not workcursor.execute 值子字符串不起作用
【发布时间】:2018-05-25 11:03:30
【问题描述】:

我正在尝试使用格式加载值 +02:00,即 -

mysql> select SUBSTR('2016-01-12T14:29:31.000+02:00',24,6);
+02:00                                       

Python:

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]))

如何验证 Python cursor.execute 中的查询以子字符串传入的值..?

【问题讨论】:

  • 请向我们展示示例 CSV 数据。
  • 猫 aaaa.csv 45123,2016-01-12T14:29:31.000+02:00

标签: python mysql python-3.x python-2.7


【解决方案1】:

您不能在INSERTVALUES 子句中调用函数。但是,我们可以将您的查询改写为INSERT INTO ... SELECT

INSERT INTO time2 (col1, EventTimeZone)
SELECT row[0], SUBSTR(row[1], 24, 6)
FROM dual;

这是我对 Python 代码的最佳猜测:

cursor.execute("INSERT INTO time2 (col1, EventTimeZone) \
    SELECT %s, SUBSTR('%s', 24, 6) \
    FROM dual",
    (row[0], row[1]))

【讨论】:

  • 不确定,不起作用.. mysql_exceptions.ProgrammingError: (1064, "您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册以了解正确使用的语法靠近 '2016-01-12T14:29:31.000+02:00'', 24, 6) FROM dual' 在第 1 行")
  • 有转义问题,或者你的row数据有问题。在任何情况下,您都可以验证我给您的原始 MySQL 查询是否有效。
  • @luckyday 你能print 查询字符串到控制台吗?我现在的猜测是您的某些 CSV 数据有问题。您必须先修复数据,然后再继续。
  • 感谢蒂姆的建议,查询成功。这似乎是一个数据读取问题......
  • python 端的子字符串也能正常工作!:) (row[0],row[1][23:29]))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2018-04-07
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
相关资源
最近更新 更多