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

使用Python操作SQL Server:查询与插入数据问题求助

先解决你的DataFrame写入错误

你碰到的AttributeError: 'DataFrame' object has no attribute 'write',基本可以确定是操作了pandas DataFrame而非Spark DataFrame——只有Spark DataFrame自带write接口,pandas的DataFrame没有这个方法。

解决步骤:

  • 先确认DataFrame类型:打印type(df),如果输出是<class 'pandas.core.frame.DataFrame'>,那就是pandas的。
  • 若API返回的是pandas DataFrame,转成Spark DataFrame即可:
    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.appName("APItoDB").getOrCreate()
    spark_df = spark.createDataFrame(pandas_df)
    
  • 之后用Spark的write.jdbc写入数据库:
    spark_df.write.jdbc(
        url="jdbc:sqlserver://你的服务器地址:1433;databaseName=目标数据库;",
        table="要写入的表名",
        mode="append",  # 可选模式:append(追加)/overwrite(覆盖)/ignore(跳过)/error(报错,默认)
        properties={"user": "数据库账号", "password": "数据库密码"}
    )
    
Python填充数据库表:DataFrame vs SQL命令

没有绝对最优,得看你的业务场景:

1. 使用DataFrame(Spark或pandas)——适合批量数据

适用场景:

  • 数据量较大(万条及以上),需要高效批量写入
  • 数据已经是结构化格式(比如API返回的JSON/CSV转成了DataFrame)
  • 不需要复杂业务逻辑,仅做单纯的插入/覆盖操作

实现方式:

方式A:Spark DataFrame(推荐大数据量)

如果API返回的是结构化列表,直接转成Spark DataFrame写入:

# 示例:API返回的结构化数据列表
api_data = [{"id":1, "name":"Alice"}, {"id":2, "name":"Bob"}]
spark_df = spark.createDataFrame(api_data)

# 写入SQL Server
spark_df.write.jdbc(
    url="jdbc:sqlserver://你的服务器地址:1433;databaseName=目标数据库;",
    table="employees",
    mode="append",
    properties={"user": "账号", "password": "密码"}
)

方式B:pandas DataFrame(适合中小数据量)

用pandas自带的to_sql方法,需要依赖sqlalchemy:

import pandas as pd
from sqlalchemy import create_engine

# 构建SQL Server连接字符串
conn_str = "mssql+pyodbc://账号:密码@服务器地址/数据库名?driver=ODBC+Driver+17+for+SQL+Server"
engine = create_engine(conn_str)

# 假设api_df是API返回转成的pandas DataFrame
api_df.to_sql(
    name="employees",
    con=engine,
    if_exists="append",  # 可选:append(追加)/replace(覆盖)/fail(报错)
    index=False
)

2. 使用SQL命令——适合复杂逻辑或少量数据

适用场景:

  • 插入前需要做复杂校验、关联查询
  • 单条或少量数据的插入/更新
  • 需要执行带计算、条件的自定义SQL语句

实现方式:

用pyodbc直接执行SQL:

import pyodbc

# 建立数据库连接
conn = pyodbc.connect(
    "DRIVER={ODBC Driver 17 for SQL Server};"
    "SERVER=你的服务器地址;"
    "DATABASE=目标数据库;"
    "UID=账号;"
    "PWD=密码"
)
cursor = conn.cursor()

# 单条数据插入
insert_sql = "INSERT INTO employees (id, name) VALUES (?, ?)"
cursor.execute(insert_sql, (3, "Charlie"))

# 批量插入(executemany适合多条数据)
batch_data = [(4, "David"), (5, "Eve")]
cursor.executemany(insert_sql, batch_data)

# 提交事务并关闭连接
conn.commit()
cursor.close()
conn.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:45:47