首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Spark (Databricks) JDBC python在SQL服务器上运行存储过程?

如何从Spark (Databricks) JDBC python在SQL服务器上运行存储过程?
EN

Stack Overflow用户
提问于 2021-03-17 09:30:15
回答 1查看 6.9K关注 0票数 3

我有一个在SQL服务器中使用Databricks中的Scala代码执行存储过程的工作示例。但是,如果在Python中也可以这样做的话,我会很惊讶吗?我不能让它起作用。请参阅下面的例子:

SCALA中的工作代码

代码语言:javascript
运行
复制
import java.sql.DriverManager
import java.sql.Connection
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types.{StructType, StructField, StringType,IntegerType};
import java.sql.ResultSet

val username = "xxxxx"
val pass = "xxxxx"
val url = "jdbc:sqlserver://xxx.database.windows.net:1433;databaseName=xxx"
val table = "SalesLT.Temp3"
val query = s"EXEC sp_truncate_table '${table}'"

val conn = DriverManager.getConnection(url, username, pass)
val rs = conn.createStatement.execute(query)

Python代码到目前为止

代码语言:javascript
运行
复制
connector_type_sql_server_driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_hostname = "xxxx.database.windows.net"
jdbc_database = "xxxx"
jdbc_port = 1433
jdbc_url = f"jdbc:sqlserver://{jdbc_hostname}:{jdbc_port};database={jdbc_database}"
jdbc_spa_user = "xxx"
jdbc_spa_password = "xxx"


query = "EXEC sys.sp_tables"
query2 = "SELECT * FROM sys.tables"

jdbc_db = (spark.read
          .format("jdbc")
          .option("driver", connector_type_sql_server_driver)
          .option("url", jdbc_url)
          .option("query", query)
          .option("user", jdbc_spa_user)
          .option("password", jdbc_spa_password)
          .load()
          )

python中的query2是有效的,但是从EXEC开始的任何东西似乎都不起作用.

如果不可能,是否有人能详细解释为什么可以用Scala而不是用databricks中的Python来完成呢?我想让它与Python一起工作,因为剩下的笔记本已经用Python了。

谢谢。

/Baatch

EN

回答 1

Stack Overflow用户

发布于 2021-03-25 12:20:17

是的,您可能只需要访问JDBC的底层Java类,如下所示:

代码语言:javascript
运行
复制
# the first line is the main entry point into JDBC world
driver_manager = spark._sc._gateway.jvm.java.sql.DriverManager
connection = driver_manager.getConnection(mssql_url, mssql_user, mssql_pass)
connection.prepareCall("EXEC sys.sp_tables").execute()
connection.close()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66670313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档