【问题标题】:An object or column name is missing while trying to load a text file into a sql table尝试将文本文件加载到 sql 表中时缺少对象或列名
【发布时间】:2019-01-24 07:38:42
【问题描述】:

我正在尝试使用 python 脚本将数据 txt 文件导入 sql 表。问题是,当我运行脚本时,它会给我一个错误,即缺少对象或列名。并且我应该验证查询中的每一列都有一个名称。现在我有点迷失了这意味着什么,因为我已经在数据库中创建了表并且它具有列名。请指导我如何克服这个错误。

我无法共享我尝试加载的数据,因为它包含敏感信息。希望我的代码就足够了,以下是我的代码:

with open(DEST_SRV_PTH) as infile:
for line in infile:
    data = line.split(",")
    query = ('insert into iru_temp_abd (sr_num,msisdn,notes) values (?%s,?%s,?%s)' % (str(fields[2:3]),str(fields[11:12]),str(fields[14:15])))
    cursor.execute(query, *data)
cnxn.commit()

【问题讨论】:

  • 你能把表 iru_temp_abd 的 DDL 也发一下吗?
  • 看到此错误时,query 变量的值是多少?插入的值之一是否可能为空白?
  • @TedatORCL.Pro 你的意思是桌子的设计?
  • @shahkalpesh 我会尝试检查
  • @MuhammadAbdullahWajahat 是的

标签: sql python-3.x oracle pyodbc


【解决方案1】:

我认为你有 2 个问题:

  1. fields 可能是一个列表,并且在所选位置没有值。尝试打印fields[2:3],它将返回一个空列表。你必须先解决这个问题。

  2. 变量查询有错误,应该是:

    query = ('insert into iru_temp_abd (sr_num,msisdn,notes) values (%s,%s,%s)' % (str(fields[2:3]),str(fields[11:12]),str(fields[14:15])))

【讨论】:

  • 我已经尝试过您提出的第二个问题的多种组合,我已经尝试过:值(?,?,?)以及值(%s,%s,%s)作为第一个问题我会检查的
  • 正如你所说,我修复了这些问题,但现在我有另一个错误:“sql 包含 0 个参数标记,而你正在传递 3 个参数标记”。当我搜索它时,我发现的唯一解决方案是将值(%s)替换为值(?),知道如何解决参数错误吗?
【解决方案2】:

使用字符串格式将数据插入到 INSERT 语句的 VALUES 子句中是一种危险的做法,因为它会使您的代码容易受到 SQL 注入漏洞的影响。您应该使用正确的参数化查询,例如,

sql = 'insert into iru_temp_abd (sr_num,msisdn,notes) values (?,?,?)'
params = (str(fields[2:3]),str(fields[11:12]),str(fields[14:15]))
crsr.execute(sql, params)

或者,如果data 确实包含列值,那么只需使用

crsr.execute(sql, data)

【讨论】:

  • 我也试过了。我认为数据格式是问题所在。 python会解析特殊字符和空格吗?
  • 不,参数值中的实际字符完全不相关。这就是参数化查询的全部目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多