python - 尝试将字符串插入 SQL Server 的问题

标签 python mysql sql-server

我正在尝试将一个字符串插入到以 0x 开头的 SQL 数据库中,但它总是在插入时失败。 0x后面的字符是随机字符,范围是A-Z、a-z和0-9,长度不定。我试图通过在字符串前面添加一个字母并在之后更新它来绕过它,但它不起作用。我正在使用

我正在尝试模仿的 SQL 语句

insert into [TestDB].[dbo].[S3_Files] ([Key],[IsLatest],[LastModified],[MarkedForDelete],[VersionID]) values ('pmtg-dox/CCM/Trades/Buy/Seller_Provided_-_Raw_Data/C''Ds_v2/NID3153422.pdf','1','2015-10-11','Yes', '0xih91kjhdaoi23ojsdpf')

Python代码

import pymssql as mssql
...
cursor.execute("insert into [TestDB].[dbo].[S3_Files] ([Key],[IsLatest],[LastModified],[MarkedForDelete],[VersionID]) values (%s,%s,%s,%s,%s)",(deleteitems['Key'],deleteitems['IsLatest'],deleteitems['LastModified'],MarkedforDelete, deleteitems['VersionId']))
conn_db.commit()

pymssql.ProgrammingError: (102, "Incorrect syntax near 'qb_QWQDrabGr7FTBREfhCLMZLw4ztx'.DB-Lib error message 20018, severity 15: General SQL Server error: Check messages from the SQL Server")

有没有办法让Python,pymssql\mysql强制插入字符串?是否有我没有使用的字符串操作技术?我试过 pypyodbc 但没有运气。

编辑:我当前的补丁是更改字符串并向该行添加一个标志,因此我记得该字符串以 0x

开头

最佳答案

这是我想出的解决方案。

由于使用适当的值运行插入命令有效,我在 SQL 中创建了一个存储过程来处理我的请求

USE [TestDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[stp_S3Files]
@Key_ varchar(4000),
@IsLatest_ varchar(200),
@Size_ varchar(200),
@LastModified_ varchar(200),
@MarkedForDelete_ varchar(200),
@VersionID_ varchar(200)
AS
insert into [TestDB].[dbo].[S3_Files] ([Key],[IsLatest],[Size(Bytes)],[LastModified],[MarkedForDelete],[VersionID]) values (@Key_, @IsLatest_, @Size_, @LastModified_, @MarkedForDelete_, @VersionID_)

然后我通过Python调用它

modkey = deleteitems['Key'].replace("'", "''")
cursor.execute("""exec TestDB.dbo.stp_S3Files
    @Key_               = '%s'
    ,@IsLatest_          =  %s
    ,@Size_              = '%s'
    ,@LastModified_      = '%s' 
    ,@MarkedForDelete_   = '%s'
    ,@VersionID_         = '%s' """ %(modkey, deleteitems['IsLatest'],deleteitems['Size'],deleteitems['LastModified'],MarkedforDelete,deleteitems['VersionId']))
conn_db.commit()

注意:字符串替换是处理路径名用'转义字符。我希望这对以后遇到同样问题的人有所帮助。

关于python - 尝试将字符串插入 SQL Server 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784970/

相关文章:

c# - 将SQL XML参数中存储的一个byte[]存储到SQL Server 2005中的一个varbinary(MAX)字段中,可以吗?

sql - "Clustered Index Scan (Clustered)"在 SQL Server 执行计划中意味着什么?

python3 -O file.py 没有创建 file.pyo

python - 如何获取子类别中所有页面的所有产品(python,amazon)

php - 多个存储过程没有被调用?

mysql - 使用 case 语句从 SELECT 更新记录。 (mysql)

python - 分组依据 分组依据 和 平均值

python - Django 按预订日期过滤外键

mysql - 'username' 中有未知列 'where clause'

sql - 基于 CONVERT 输出的行数