【问题标题】:create_engine using ssl problem sqlalchemy [duplicate]create_engine 使用 ssl 问题 sqlalchemy [重复]
【发布时间】:2019-10-30 05:26:59
【问题描述】:

我正在尝试使用 sqlaclhemy 使用create_engin() 方法创建引擎。在使用 ssl 之前,我使用的是命令:

conn_string = r'postgresql://root:my_pass@hostname/db_name'
self.engine = create_engine(conn_string)

但是在开始使用 ssl 后,它就停止了工作。我尝试寻找类似的问题,发现How do I connect to Postgresql using SSL from SqlAchemy+pg8000?

但是当我尝试使用答案 self.engine = create_engine(conn_string, connect_args={'sslmode': 'require'}) 时出现错误

用户“root”的密码验证失败

即使我的密码是正确的。我能够使用 psychopg2 api 连接如下:

conn = psycopg2.connect(dbname='postgres', user='root', password=my_pass,
                     host=host_name, port='5432', sslmode='require')

这对我有用,但不好,因为我有自己的使用 sqlalchemy 引擎的 api,我不想破坏它。 我试图找到一种方法来使用上面创建的 conn 创建引擎,但我唯一能找到的是Create a sqlalchemy engine using an existing psycopg2 connection pool,而且我不需要线程池,psycopg2 也没有 .pool 方法

在 sqlalchemy 失败的情况下 psycopg2 怎么可能成功?

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    显然问题出在密码上。 传递 connect_args 参数时,如果密码中有一些特殊字符 [对我来说是 %],那么 sqlalchemy 会错误地解析字符串,因此您将收到用户“root”错误的密码验证失败

    [例如以下密码无效

    kltgg2dds$fdslkj%3
    

    但是对于没有 % 的密码,它会起作用]

    【讨论】:

    • 必须对内容进行 URL 编码,请参阅上面重复链接的答案。我总是在问题之前阅读答案,所以我错过了上面的链接答案,因此我为未来的搜索者添加了这个评论。保重!
    猜你喜欢
    • 2017-09-26
    • 2016-08-28
    • 2021-03-11
    • 2013-03-21
    • 2016-07-06
    • 2017-12-09
    • 2021-12-04
    • 2012-12-25
    相关资源
    最近更新 更多