python - 使用 Python 从 SQL Server 查询和插入记录

标签 python python-3.x azure pyspark azure-databricks

我们正在将一些代码从 SSIS 移植到 Python。作为该项目的一部分,我正在重新创建一些包,但我遇到了数据库访问问题。我已经设法像这样查询数据库:

employees_table = (spark.read
.format("jdbc")
.option("url", "jdbc:sqlserver://dev.database.windows.net:1433;database=Employees;加密=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30; ”)
.option("查询", 查询)
.option("用户", 用户名)
.option("密码", 密码)
.load()
)

通过这个,我进行 API 调用,并希望将结果放入数据库,但我尝试的所有操作都会导致错误。

            df.write.method("append") \
                .format("jdbc") \
                .option("url", "jdbc:sqlserver://dev.database.windows.net:1433;database=Employees;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;") \
                .option("v_SQL_Insert", query) \
                .option("user", username) \
                .option("password", password) \
                .option("query",v_SQL_Insert) \
                .save()</p>

给我错误 AttributeError: 'DataFrame' 对象没有属性 'write'。
我使用spark.write遇到同样的错误,或者如果我尝试创建一个实际的数据帧,填充它并尝试使用写入函数。

我的问题是,从 Python 填充数据库表的最佳方法是什么?是创建数据框并将其保存到数据库,还是创建 SQL 命令?我们如何发送这些数据?

最佳答案

你有使用过 Pandas 吗?如果 df 不是 Spark DataFrame,您经常会看到此错误,最常见的是如果它实际上是 Pandas DataFrame(如错误消息所示,它没有属性“write”。)

Spark JDBC DataWriter tutorial code here工作得很好

jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:postgresql:dbserver") \
    .option("dbtable", "schema.tablename") \
    .option("user", "username") \
    .option("password", "password") \
    .load()

jdbcDF.write \
    .format("jdbc") \
    .option("url", "jdbc:postgresql:dbserver") \
    .option("dbtable", "schema.tablename") \
    .option("user", "username") \
    .option("password", "password") \
    .save()

所以主要的做法是:

  • 创建您想要写入数据库的 PySpark DataFrame
  • 将其作为独立的临时表写入数据库
  • 可以选择在目标数据库中执行额外的 ETL

关于python - 使用 Python 从 SQL Server 查询和插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74452611/

相关文章:

python - 保存文本分类模型后获取真实的类标签

python - 如何在 Python f 字符串中跳过十进制的尾随零?

azure - Remove-AzureRmResource 请求的资源不支持http方法 'DELETE'

python - 如何在 Flask 应用程序中用 '\n' 替换字符串中的 '<br>'?

python - 如何制作允许用户在其中复制/粘贴文本的 wxPython MessageDialog?

python - 为什么我的数据库抛出错误?

python-3.x - 在Python中仅将一行更改为列

python - 通过 Python 电子邮件库发送电子邮件会引发错误 "expected string or bytes-like object"

azure - 应用服务 - 虚拟应用程序和目录

ios - 使用 Microsoft Azure MobileService 同步多个表