我对Python还很陌生,直到现在这个项目(甚至可能不是最好的方法)我才真正与SQL Server和XML解析进行交互。长话短说,我的IT团队非常落后,我需要将数据放入沙箱表(从XML解析)。
XML中有一段包含属性[xx]001到[xx]025。并不是所有这些属性都包含在我要解析的每个XML中。因此,我遍历所有可能属性的循环,并将结果附加到列表中。由于并非所有属性都在每个XML中,因此我可以通过尝试表示每个属性来产生noneTypes。在创建需要将其转换为空的SQL insert语句之前,这不是问题。可能有一些非常简单的方法来处理这个问题,但是我的新手身份阻碍了我的进步。相关代码如下。。。
也许总的来说有更好的方法来做?我担心sqlList可能也只能在达到某个极限之前变大。
#this list contains Nones
sqlList = (", ".join(map(repr,appendedList)))
#the Nones are an issue when I get to here
curs.execute("USE Sandbox INSERT INTO myTable VALUES (%s)" % (sqlList))
curs.commit()
下面是sqlList的一个示例:
'20_2014', '20_2014_3/25/2015 2:01 PM', 'FBR', 'A', '0', '0', '3', '1', '134', None, None, '0', None, '0', '0', '0', '0', '0', None, None, '2', None, None, None, None
我收到以下错误消息:
pypyodbc.ProgrammingError: ('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'None'.")
您的解决方案仍然是动态SQL
如果使用参数化查询,所有这些问题都会消失。本例只使用了2个属性(而不是问题中的25个属性),但原理完全相同。注意,我不需要做任何特殊的事情来处理
None
值,以便将它们作为空值插入。控制台输出是。。。
。。。并且这三行被正确地插入到表中,包括第二行中的NULL(None)。
没关系。见下文:
总的来说还是想知道这是不是“正确”的方法。
相关问题 更多 >
编程相关推荐