Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';我搞不懂数据库URI Postgres Azure_Python_Database_Postgresql_Azure - Fatal编程技术网

Python Can';我搞不懂数据库URI Postgres Azure

Python Can';我搞不懂数据库URI Postgres Azure,python,database,postgresql,azure,Python,Database,Postgresql,Azure,我最近在Azure上建立了一个Postgres数据库,我在计算我的DB URI时遇到了很多麻烦。这些信条看起来像: 服务器:name.postgres.database.azure.com 用户(管理员角色):admin@name 密码:mypassword 数据库名称:postgres 所以我尝试使用psql并传入连接字符串psqlpostgresql://admin@姓名:mypassword@name.postgres.database.azure.com:5432/postgres 但这

我最近在Azure上建立了一个Postgres数据库,我在计算我的DB URI时遇到了很多麻烦。这些信条看起来像:

服务器:name.postgres.database.azure.com

用户(管理员角色):admin@name

密码:mypassword

数据库名称:postgres

所以我尝试使用
psql
并传入连接字符串
psqlpostgresql://admin@姓名:mypassword@name.postgres.database.azure.com:5432/postgres

但这给了我一个错误

psql:无法将主机名“name”转换为地址:nodename或 提供了servname,或未知

有趣的是,这是有效的:

psql-h name.postgres.database.azure.com-p5432-Uadmin@name博士后


我问这个问题的原因是因为我想使用Python和sqlalchemy,并想传入DB uri字符串。

根据我的经验,使用连接url作为
psql
的连接字符串的错误是由使用贪婪模式算法的
psql
连接字符串解析器造成的

根据psql连接字符串的小节,
user
参数关键字定义如下

使用者

连接为的PostgreSQL用户名。默认值与运行应用程序的用户的操作系统名称相同

用户
命名需要匹配正则表达式 通过
NAME\u REGEX
配置变量进行配置,如下所示,请参阅文档了解详细信息

NAME_REGEX

用户和组名将根据此常规项进行检查 表示如果名称与此regexp不匹配,则用户和 拒绝在adduser中创建组,除非启用--force badname 设置设置--force badname时,只执行弱检查。 默认值为最保守的^[a-z][a-z0-9]*$

因此Azure上的postgres用户名不是标准的类Unix名称,它与Azure用户命名模式相匹配
username@servname
用于Azure服务,如Azure应用程序服务的FTP、Azure SQL数据库和Azure上的Postgres等


上述原因导致Azure postgres连接url与
psql
工具不兼容,但不要担心将Python与
psycopg2
一起使用,您可以参考官方教程了解它。

好的,至少对我来说,这是可行的。在此处发布,以防其他人遇到相同问题

  • 为了连接到SQLAlchemy,传入此DB URI对我很有用: Postgresql://user:password@主机名:端口/dbname。比如说,
  • postgresql://admin@姓名:password@name.postgres.database.azure.com:5432/博士后

  • 对于在命令行中使用
    psql
    ,以下内容适用于我: psql“dbname=postgres host=name.postgres.database.azure.com用户=admin@name密码=密码端口=5432“
  • 注意,请小心转义任何特殊字符(例如密码)。例如,我在使用bash shell,让特殊角色抛出一些奇怪的东西

  • 为了连接到psycopg2,我按照以下说明操作:

  • 您还可以按照此处的说明解析URL:

    注意,在与psql连接方面,按照此处的文档:,我实际上能够使用以下方式进行连接:
    psql“dbname=dbhere host=hosthere user=userhere password=pwhere port=5432”
    。但是,是的,谢谢你链接到Azure官方教程,关于使用postgresI连接python,我在通过sqlalchemy连接时遇到了问题。我可以通过psycopg2进行连接,我想..@Vincent你能为通过sqlalchemy进行连接的问题发布一个新的线程吗?