如何在执行“显示”数据库时求解psycopg语法询问?

发布于 2025-01-25 17:34:13 字数 729 浏览 3 评论 0原文

我使用Windows 11,Python 3.10.4 64位,PostgreSQL 14.2数据库和Psycopg2 2.9.3。

我连接到数据库:

import psycopg2

SCHEMA_NAME = "myschema"

connx = psycopg2.connect(database="mydatabase", user="myadmin", password="123456", host="127.0.0.1", port="5432", options="-c search_path=myschema")

cur = connx.cursor()

然后我想检查模式是否存在:

sql_str = "SHOW DATABASES LIKE %s ESCAPE ''"
cur.execute(sql_str, [SCHEMA_NAME])

但是我会收到以下错误:

Traceback (most recent call last):

    cur.execute("SHOW `DATABASES` LIKE %s ESCAPE ''", [SCHEMA_NAME])
psycopg2.errors.SyntaxError: syntax error at or near "LIKE"
LINE 1: SHOW DATABASES LIKE 'myschema' ESCAPE ''

这里有什么问题?

I use Windows 11, Python 3.10.4 64-bit, PostgreSQL 14.2 database and psycopg2 2.9.3.

I connect to a database:

import psycopg2

SCHEMA_NAME = "myschema"

connx = psycopg2.connect(database="mydatabase", user="myadmin", password="123456", host="127.0.0.1", port="5432", options="-c search_path=myschema")

cur = connx.cursor()

Then I want to check if the schema exists:

sql_str = "SHOW DATABASES LIKE %s ESCAPE ''"
cur.execute(sql_str, [SCHEMA_NAME])

but I get the following error:

Traceback (most recent call last):

    cur.execute("SHOW `DATABASES` LIKE %s ESCAPE ''", [SCHEMA_NAME])
psycopg2.errors.SyntaxError: syntax error at or near "LIKE"
LINE 1: SHOW DATABASES LIKE 'myschema' ESCAPE ''

What is wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七色彩虹 2025-02-01 17:34:13

在Postgresql A 架构中和A 数据库是2种不同的方法。

以下查询将告诉您该模式是否存在。

SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'myschema';

并且您的

sql_str = "SELECT schema_name FROM information_schema.schemata WHERE schema_name =  %s ;"
cur.execute(sql_str, [SCHEMA_NAME])

如果您正在检查是否存在数据库,

SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname'; 

代码将变为

sql_str = "SELECT datname FROM pg_catalog.pg_database WHERE datname =  %s ;"
cur.execute(sql_str, [DATABASE_NAME])

In PostgreSQL a schema and a database are 2 different things.

The following query will tell you whether the schema exists.

SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'myschema';

And your code becomes

sql_str = "SELECT schema_name FROM information_schema.schemata WHERE schema_name =  %s ;"
cur.execute(sql_str, [SCHEMA_NAME])

If you are checking that a database exists it will be

SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname'; 

And your code will become

sql_str = "SELECT datname FROM pg_catalog.pg_database WHERE datname =  %s ;"
cur.execute(sql_str, [DATABASE_NAME])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文