亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法使用python插入數據庫

無法使用python插入數據庫

慕萊塢森 2023-12-12 15:24:26
我使用 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]無法綁定多部分標識符“DidosSupply.zip”。(4104) (SQLExecDirectW)')當我嘗試調用以下函數并插入到 table 時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()
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

參數化您的查詢,不要注入值,這是一個巨大的安全缺陷。


cursor.execute("INSERT INTO dbo.sftpserverlist(FileName,FileSize) VALUES (?,?)",files[0],str(sizes[0]))

conn.commit()

cursor.close()

您收到錯誤的原因是因為您(不安全地)注入的值沒有被引用;因此 的值files[0](在本例中具有值"DidosSupply.zip")被解釋為列的名稱;它不可能是這樣,因為你在一個VALUES沒有 的子句中FROM。


當然,僅僅在值周圍加上引號并不是解決方案,因為引號可以被轉義。


查看完整回答
反對 回復 2023-12-12
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

無論如何,我都不是Python專家,但我認為這是老式的做法(INSERT INTO)。我最近偶然發現了一種超級簡單、可擴展且可控的方法,可以將數據從 Python 推送到 SQL Server。嘗試示例代碼,如果您有其他問題,請回復。


import pyodbc

import pandas as pd


engine = "mssql+pyodbc://your_server_name/your_database_name?driver=SQL Server Native Client 11.0?trusted_connection=yes"


... dataframe here...


dataframe.to_sql(x, engine, if_exists='append', index=True)

數據框是非常不言自明的。


x = 您希望表在 SQL Server 中的名稱。


查看完整回答
反對 回復 2023-12-12
  • 2 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號