执行 "SHOW DATABASES LIKE" 查询时如何解决 psycopg SyntaxError?
How to solve psycopg SyntaxError while executing "SHOW DATABASES LIKE" query?
我使用 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 ''
这里有什么问题?
在 PostgreSQL 中,schema 和 database 是两个不同的东西。
以下查询将告诉您架构是否存在。
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])
我使用 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 ''
这里有什么问题?
在 PostgreSQL 中,schema 和 database 是两个不同的东西。
以下查询将告诉您架构是否存在。
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])