You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DataFrame.to_sql()向SQL Server插入含单引号字符串报错求助

解决pandas to_sql插入SQL Server时单引号转义问题

下面提供三种可行的解决方案,针对你遇到的to_sql生成双引号包裹含单引号字符串导致SQL Server报错的问题:

方法1:修改SQLAlchemy连接配置,强制单引号转义

用pyodbc连接SQL Server时,SQLAlchemy默认的引号处理逻辑会用双引号包裹特殊字符串,而SQL Server把双引号当成标识符(列名/表名)。你可以在创建连接URL时添加quote_identifier=false参数,让SQLAlchemy遵循SQL Server的单引号转义规则(将单引号替换为两个单引号)。

from sqlalchemy.engine import URL
import sqlalchemy

# 构建连接URL,替换为你的数据库信息
connection_url = URL.create(
    "mssql+pyodbc",
    username="你的用户名",
    password="你的密码",
    host="你的数据库地址",
    database="你的数据库名",
    query={
        "driver": "ODBC Driver 17 for SQL Server",
        "quote_identifier": "false"  # 关键配置
    }
)

engine = sqlalchemy.create_engine(connection_url)
# 执行插入
data_frame.to_sql(table, engine, if_exists='append', index=False)

方法2:手动预处理DataFrame,转义单引号

直接遍历DataFrame的字符串列,把所有单引号替换成两个单引号,再执行插入。这种方式简单直接,适合快速验证场景。

import pandas as pd

# 筛选所有字符串类型的列
string_columns = data_frame.select_dtypes(include=['object']).columns

# 替换单引号为两个单引号,注意关闭正则匹配避免意外替换
data_frame[string_columns] = data_frame[string_columns].apply(
    lambda col: col.str.replace("'", "''", regex=False)
)

# 执行插入
data_frame.to_sql(table, engine, if_exists='append', index=False)

方法3:启用fast_executemany,批量插入自动处理转义

启用fast_executemany=True不仅能大幅提升批量插入的速度,还会通过参数绑定的方式传递数据,避免直接生成带字符串值的SQL语句,从根源上解决引号转义问题。

import sqlalchemy

# 创建engine时添加fast_executemany参数
engine = sqlalchemy.create_engine(connection_url, fast_executemany=True)

# 执行插入
data_frame.to_sql(table, engine, if_exists='append', index=False)

内容的提问来源于stack exchange,提问作者cpa390

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:54:25