如何连接到Postgres中的特定模式?(Python,Sqlalchemy)

c9x0cxw0  于 2023-05-27  发布在  Python
关注(0)|答案(2)|浏览(460)

如何使用Sqlalchemy连接到特定的Postgres模式?
所以我创建了一个名为“rezerwacja_domkow”的新模式。我可以在Pgadmin 4中看到它。但是整个模式系统让我感到困惑(到目前为止,我只玩过sqlite,它更简单)。我不知道如何连接到它,只能在这个模式下工作。
当我连接到主数据库时,我看到:

List of schemas
       Name        |       Owner       
-------------------+-------------------
 public            | pg_database_owner
 rezerwacja_domkow | postgres
 tiger             | postgres
 tiger_data        | postgres
 topology          | postgres
(5 rows)

但是当我尝试使用Sqlalchemy检查器列出表名时,我没有看到任何来自“rezerwacja_domkow”模式的表。我想“连接”到这个特定的模式,并只修改/添加数据到这个模式。非常感谢你的帮助。

g2ieeal7

g2ieeal71#

要连接到特定的模式,首先需要创建数据库URL。这可以如下进行:

database_url = "postgresql://username:password@host:port/database_name?currentSchema=rezerwacja_domkow"

“currentSchema”属性引用所选的架构。
接下来,创建引擎:

engine = create_engine(database_url)

现在,执行查询:

query = "SELECT * FROM table_name"
result = engine.execute(query)

在端部闭合连接中:

result.close()
engine.dispose()
  • 相应地替换表名称和凭据。

参考-1:https://analyzingalpha.com/connect-postgresql-sqlalchemy
参考文献-2:https://docs.sqlalchemy.org/en/20/core/engines.html

rm5edbpk

rm5edbpk2#

你可能想花半个小时至少浏览一下official manuals。模式就像目录或任何其他名称空间。就像目录允许你有两个同名的文件“dir1/file1.txt”和“dir2/file2.txt”一样,模式允许你有两个同名的表。
而且,就像目录一样,您需要给予文件的完整路径(“dir1/file1.txt”)或指定其他方法来查找它。在unix/linux系统中,有一个“搜索路径”的概念,它保存在一个变量中,例如保存你的类型“/usr/bin/date”。相反,你可以只输入“日期”,按回车键,你的计算机将按顺序检查$PATH变量中的所有目录。
同样的情况也适用于PostgreSQL。您可以按表的完整架构引用表:

SELECT * FROM rezerwacja_domkow.table1

或者让你的搜索路径来处理它

SET search_path=rezerwacja_domkow,some_other_schema,public;
SELECT * FROM table1;

像大多数其他PostgreSQL设置一样,您可以为特定的数据库或用户(ALTER DATABASE ...ALTER USER ...)提供search_path的默认值,或者只是在连接或会话中设置它,就像我上面展示的那样。
网上有很多这样做的例子。

相关问题