我正在尝试将一个字符串插入到以 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/