我们正在将一些代码从 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/