【问题标题】:How to determine if Python DB-API connection object is of a certain DBMS (e.g., PostgreSQL, MySQL)如何确定 Python DB-API 连接对象是否属于某个 DBMS(例如 PostgreSQL、MySQL)
【发布时间】:2020-11-21 15:29:41
【问题描述】:

driver 成为DB-API 驱动程序(例如psycopg2pymysql),您可以通过connnection = driver.connect(...) 获取连接对象。如何检查连接对象连接到哪种 DBMS:(1) 最好是 DBMS 名称或 (2) 模块名称。

用例:

我需要使用不同的 SQL 语法进行特殊查询(例如,PostgreSQL 的 COPY 子句与 MySQL 的批量 INSERT)。

【问题讨论】:

  • 在你知道连接类型的时候,可以选择查询
  • 问题是当您将连接对象传递给另一个函数时。然后,您需要传递另一个参数来描述不可取的 DBMS 名称。附加到连接的属性是最好的。
  • 这听起来像XY problem。您应该已经知道要使用的 DB-API 以及要运行的操作。请为您的用例发布示例代码以说明您的实际问题。
  • 不是真的,@nbk 在理解这个问题方面做得非常好,然后提供了一个满足用例的解决方案。

标签: python mysql sql postgresql python-db-api


【解决方案1】:

类似的东西?:

type(con)                                                                                                                                                                  
psycopg2.extensions.connection

type(con)                                                                                                                                                                  
sqlite3.Connection

或者更短:

con.__class__                                                                                                                                                             
psycopg2.extensions.connection

con.__class__                                                                                                                                                             
sqlite3.Connection

【讨论】:

  • 答案需要一些解释
  • 代码就是解释。没有必要添加重复代码显示的内容。
  • 没有答案需要解释代码的作用,作为您的第一个示例检查可以检查的连接变量的类型
  • 有用,写下你自己的答案,而不是批评提问者已经理解的答案。
  • 获取模块名称是一个很好的解决方案。最好,我希望获得 DBMS 名称,而无需将模块/类/类型映射到 DBMS 字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
相关资源
最近更新 更多