我使用python 3.8.5时出错
( cursor.execute("INSERT INTO dbo.sftpserverlist(FileName,FileSize) VALUES ("+files[0]+","+str(sizes[0])+")")
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]The multi-part identifier "DidosSupply.zip" could not be bound. (4104) (SQLExecDirectW)')
当我尝试调用下面的函数并插入表dbo.sftpserverlist
时
def getfile(sftp):
FileNames=[]
FileName = sftp.listdir_attr()
for i in FileName:
FileNames.append(i.filename)
FileSizes=[]
FileSize = sftp.listdir_attr()
for i in FileSize:
FileSizes.append(i.st_size)
return FileNames,FileSizes
-----------------------------------------------------------
cursor.execute("INSERT INTO dbo.sftpserverlist(FileName,FileSize) VALUES ("+files[0]+","+str(sizes[0])+")")
conn.commit()
参数化查询,不要注入值,这是一个巨大的安全缺陷
出现错误的原因是(不安全地)注入的值没有被引用;因此
files[0]
的值(在本例中具有值"DidosSupply.zip"
)被解释为列的名称;它不可能是这样的,因为你在一个没有FROM
的VALUES
子句中当然,仅在值周围加引号不是解决方案,因为引号可以转义
无论如何,我不是Python专家,但我认为这是一种老派的方法(插入到)。我最近偶然发现了一种超级简单、可伸缩且可控的方法,可以将数据从Python推送到SQL Server。如果您还有其他问题,请尝试示例代码并发回
dataframe是非常不言自明的
x=希望表位于SQL Server中的名称
相关问题 更多 >
编程相关推荐