【问题标题】:How to connect my Sybase Database using SQLAlchemy (1.3.18) with Python (3.8.3)?如何使用 SQLAlchemy (1.3.18) 和 Python (3.8.3) 连接我的 Sybase 数据库?
【发布时间】:2020-11-25 17:34:24
【问题描述】:

我正在使用带有 SQLAlchemy 1.3.18 库的 SQL Server,感谢 fast_executemany = True,它现在比以前更快。

我必须与 Sybase 数据库建立链接。我收到以下错误:

TypeError:使用配置 SybaseDialect_pyodbc/QueuePool/Engine 将无效参数“fast_executemany”发送到 create_engine()。

这对我来说是个问题,因为我想要快速连接并在我的数据库上快速写入。但即使我从方法中删除这些参数,我也会遇到以下错误:

sqlalchemy.exc.OperationnalError : (pyodbc.OperationnalError)

代码如下:

engine = sqlalchemy.create_engine(con['sql']['connexion_string'])

con['sql']['connexion_string'] = "sybase+pyodbc://<user>:<password>@server_name/[db_name]driver=ODBC Driver 13 for SQL Server"

我认为它来自驱动程序(也许我错了),但我不知道是哪一个,并且在文档中,我明白我们必须使用 pyodbc 所以 ODBC 驱动程序。

【问题讨论】:

    标签: python sqlalchemy sybase pyodbc sap-ase


    【解决方案1】:

    sybase 内部方言不支持 fast_executemany,但 external dialect 支持。

    请注意,您需要为 ASE 使用 SAP 的 ODBC 驱动程序; FreeTDS ODBC 不适用于 fast_executemany。

    【讨论】:

      【解决方案2】:

      所以经过多次搜索,我找到了适合我的东西。

      你必须像 odbc 连接一样写作:

          params = (
                "DRIVER = "+driver+";"\
                "SERVER = "+server+";"\
                "DATABASE = "+database+";"\
                "PORT = "+port+";"\
                "UID = "+user+";"\
                "PWD= "+password+";"
      
          params = urllib.parse.quote_plus(params) 
      

      其中 params 是您的 odbc 连接。

      然后这样做:

      connexion_string = 'sybase+pyodbc:///?odbc_connect = %s'%params)
      

      使用此连接字符串,您可以执行 sqlalchemy.create_engine(connexion_string)

      【讨论】:

      • 可以分享一下驱动参数吗?
      【解决方案3】:

      对于将来的人,这就是我在 Windows 上解决问题的方法:

      获取 ODBC dsn 路径:开始>control_panel>admin_tools>ODBC_Data_source(64-bit)> 这里有 2 个选项:检查系统 DSN 选项卡。您可能会在 SQL Anywhere 17 驱动程序中看到类似“原型”的名称。 或者您必须在File Dsn > 添加 > {选择您的方言} > {浏览以保存文件路径} > 然后单击 Finish 下创建自己的 DSN。系统会提示您填写您的 Sql Anywhere 信息……数据库名称、Uid、PWD 等…… 查看 Chad Kenneedy 对设置自定义 ODBC Pyodbc error Data source name not found and no default driver specified paradox的回答

      • 确保在搞清楚一切后测试 Dsn 连接。

      完成后,

      engine = create_engine("sybase+pyodbc://<DSN_username>:<DSN_password>@<DSN_file_name,eg_prototype>")

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        相关资源
        最近更新 更多