gpt4 book ai didi

python - 如何使用 Django 中的默认连接从 Select 查询中获取键(列名)-值对

转载 作者:行者123 更新时间:2023-11-29 12:23:53 28 4
gpt4 key购买 nike

我在一个 Django 项目中有 4 个应用程序。我正在使用默认的 Postgres 数据库连接,我已将其包含在我的 setting.py 文件中。

django.db.connection 对象表示默认的数据库连接。要使用数据库连接,我调用 connection.cursor() 来获取游标对象。然后,我调用 cursor.execute(sql, [params]) 来执行原始 Postgres 查询和 cursor.fetchone()cursor.fetchall() 返回结果行。

现在,在一个应用程序中,我想使用 (connection.cursor(cursor_factory = psycopg2.extras.RealDictCursor)) 来获取 (key(column name) 中的记录, value) 对,由 psycopg2.connect 提供,但我的默认连接与 cursor_factory = psycopg2.extras.RealDictCursor 不兼容。

如何使用默认连接从数据库中获取(key(column name), value)对?
在 setting.py 中

`DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS' : {
'options': '-c search_path=django,public'
},
'NAME': 'postgres',
'USER': 'abc',
'PASSWORD': 'password!',
'HOST': '',
'PORT': '',
}
}
`

在python文件.py中

from django.db import connection

cur = connection.cursor(cursor_factory = psycopg2.extras.RealDictCursor)
cur.execute("SELECT * FROM sometable")

data= cur.fetchall()

ERROR: cursor() got an unexpected keyword argument 'cursor_factory'

最佳答案

您必须获得底层 postgres 连接,确保它已建立,然后您可以指定自定义 cursor_factory。

from django.db import connections
import psycopg2


def scan_tables(app):
conn = connections['default']
conn.ensure_connection()
with conn.connection.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as cursor:
cursor.execute("SELECT table_name, column_name "
"FROM information_schema.columns AS c "
"WHERE table_name LIKE '{}_%'".format(app))
print(cursor.fetchall())


scan_tables('django')

这是来自 https://stackoverflow.com/a/48844401/803174 的改编答案@kert 只是放置了不同的光标类型。

关于python - 如何使用 Django 中的默认连接从 Select 查询中获取键(列名)-值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993213/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com