【问题标题】:Adding data into SQL with python won't work使用python将数据添加到SQL中不起作用
【发布时间】: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):&lt;30}' " Wat 否则我需要将它添加到表中
  • 不要通过将 Python 字符串连接在一起来构建 sql 查询,db 库有一些工具可以帮助您安全地执行此操作,并在需要时根据 db 后端和列自动引用值类型。见stackoverflow.com/a/32333755/202168
  • 在读到他们使用UPDATE 之后,我假设我会使用INSERT,但我仍然对这条线的外观感到困惑
  • 你为什么使用&lt;30?它为插入的字符串添加空格。只需在" " 内使用f"'{value}'"' '。但最好使用特殊函数来创建查询 - 比如在某些模块中 execute("INSERT ... (?, ?, ?, ...)", data) 使用 ? 或 `% 作为占位符

标签: python sql


【解决方案1】:

正如@furas 所提到的,最好的方法是使用占位符。 (%s 代表字符串,%i 代表整数)

import sqlalchemy

testDBCon = sqlalchemy.create_engine('mssql+pyodbc://SRVISCDB,58837/testDB?driver=SQL+Server+Native+Client+11.0')

#Choose what query to select a column from
query1 = "SELECT * FROM testDB.dbo.SuspensiaImageDetails;"

query2 = "INSERT INTO testDB.dbo.SuspensiaImageDetails (FileName, 
         FileSize, FilePath, Height, Width, Format, Mode, Frames) VALUES (%s,%i,%s,%i,%i,%s,%s,%i)"

values = ('X01LA0295.JPG',9718,'.JPG',400,600,'JPEG','RGB',1) 

engine.execute(query2,values)    

编码愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多