【发布时间】:2022-07-21 18:07:26
【问题描述】:
我有一个 python 脚本,它应该能够将数据写入一个生成的 SQL 表。我有这些行应该这样做:
#Connect to the database
testDBCon = sqlalchemy.create_engine('mssql+pyodbc://SRVISCDB,58837/testDB?driver=SQL+Server+Native+Client+11.0')
#Choose what query to select a column from
query = "SELECT * FROM testDB.dbo.SuspensiaImageDetails;"
query = "INSERT INTO testDB.dbo.SuspensiaImageDetails (FileName,
FileSize, FilePath, Height, Width, Format, Mode, Frames)VALUES ("
query += line
query += ");"
当我print(query) 我得到这个时得到的输出:
INSERT INTO testDB.dbo.SuspensiaImageDetails (FileName, FileSize,
FilePath, Height, Width, Format, Mode, Frames)VALUES (,X01LA0295.JPG
,9718 ,.JPG
,400
600 ,JPEG ,RGB
,1 ,);
我看到的一些问题是值之间的所有差距,以及值之间的逗号。我有这条线,在值之间放一个逗号,但它把它放在每个值的前面和结尾。然而,这些也可能是一个问题。
line += f",{str(value):<30} "
我的问题是如何修复这些行以将我拥有的值放入 SQL 数据库表中?
【问题讨论】:
-
首先,您需要在 char/varchar 值周围加上单引号。逗号也太多了。
-
所以我需要一个围绕我想添加的每个值的单引号?我补充说,通过
line += f",'{str(value):<30}' "Wat 否则我需要将它添加到表中 -
不要通过将 Python 字符串连接在一起来构建 sql 查询,db 库有一些工具可以帮助您安全地执行此操作,并在需要时根据 db 后端和列自动引用值类型。见stackoverflow.com/a/32333755/202168
-
在读到他们使用
UPDATE之后,我假设我会使用INSERT,但我仍然对这条线的外观感到困惑 -
你为什么使用
<30?它为插入的字符串添加空格。只需在" "内使用f"'{value}'"和' '。但最好使用特殊函数来创建查询 - 比如在某些模块中execute("INSERT ... (?, ?, ?, ...)", data)使用?或 `% 作为占位符