在django中运行普通sql查询时如何获取字段名
【腾讯云】亏本大甩卖,服务器4核16G 1年370元(带宽12M,系统盘120GB SSD盘,月流量2000GB)!!!!!!
云产品 配置 价格
服务器 1核2G,带宽5M,系统盘50GB SSD盘,月流量500GB 38元/年
MySQL 1核1G 19元/年
服务器 16核32G,带宽18M,系统盘250GB SSD盘,月流量5000GB 1197元/年
点我进入腾讯云,查看更多详情

In one of my django views I query database using plain sql (not orm) and return results.

sql = "select * from foo_bar"
cursor = connection.cursor()
cursor.execute(sql)
rows = cursor.fetchall()

I am getting the data fine, but not the column names. How can I get the field names of the result set that is returned?

#0

According to PEP 249, you can try using cursor.description, but this is not entirely reliable.

#1

On the Django docs, there's a pretty simple method provided (which does indeed use cursor.description, as Ignacio answered).

def dictfetchall(cursor):
    "Returns all rows from a cursor as a dict"
    desc = cursor.description
    return [
        dict(zip([col[0] for col in desc], row))
        for row in cursor.fetchall()
    ]

#2

I have found a nice solution in Doug Hellmann's blog:

http://doughellmann.com/2007/12/30/using-raw-sql-in-django.html

from itertools import *
from django.db import connection

def query_to_dicts(query_string, *query_args):
    """Run a simple query and produce a generator
    that returns the results as a bunch of dictionaries
    with keys for the column values selected.
    """
    cursor = connection.cursor()
    cursor.execute(query_string, query_args)
    col_names = [desc[0] for desc in cursor.description]
    while True:
        row = cursor.fetchone()
        if row is None:
            break
        row_dict = dict(izip(col_names, row))
        yield row_dict
    return

Example usage:

  row_dicts = query_to_dicts("""select * from table""") 

#3

try the following code :

def read_data(db_name,tbl_name): 
    details = sfconfig_1.dbdetails
    connect_string = 'DRIVER=ODBC Driver 17 for SQL Server;SERVER={server}; DATABASE={database};UID={username}\
        ;PWD={password};Encrypt=YES;TrustServerCertificate=YES'.format(**details)

    connection = pyodbc.connect(connect_string)#connecting to the server
    print("connencted to db")
    # query syntax 

    query = 'select top 100 * from '+'[{}].[dbo].[{}]'.format(db_name,tbl_name) + ' t where t.chargeid ='+ "'622102*3'"+';'
    #print(query,"\n")
    df    = pd.read_sql_query(query,con=connection)
    print(df.iloc[0])

    return "connected to db...................."

推荐文章

支持移动和web布局的HTML电子邮件模板框架

支持移动和web布局的HTML电子邮件模板框架

推荐文章

两个应用程序使用相同的显式应用程序ID

两个应用程序使用相同的显式应用程序ID

推荐文章

如何浏览wordpress核心源代码并找到所需的.php文件以进行修改

如何浏览wordpress核心源代码并找到所需的.php文件以进行修改

推荐文章

来自相关节点的XSLT合并信息

来自相关节点的XSLT合并信息

推荐文章

如何查找重复的时间戳数据

如何查找重复的时间戳数据

推荐文章

flash播放器和跨域套接字连接

flash播放器和跨域套接字连接

推荐文章

如何使用ADO.NET?

如何使用ADO.NET?

推荐文章

CSS-HTML:我的下拉菜单li正在切断图像高度

CSS-HTML:我的下拉菜单li正在切断图像高度

推荐文章

得到一个奇怪的java.lang.NoClassDefFoundError例外

得到一个奇怪的java.lang.NoClassDefFoundError例外

推荐文章

使用c从数组中随机选取4个元素#

使用c从数组中随机选取4个元素#

推荐文章

ASP中的图像显示

ASP中的图像显示

推荐文章

如何在经典ASP中用数据库值进行计算?

如何在经典ASP中用数据库值进行计算?

推荐文章

获取由MVC3中的视图呈现的HTML

获取由MVC3中的视图呈现的HTML

推荐文章

切换显示间隔500ms的DIV

切换显示间隔500ms的DIV

推荐文章

IE内存泄漏和jQuery的eval

IE内存泄漏和jQuery的eval

推荐文章

jQuery水平平滑滚动背景图像?

jQuery水平平滑滚动背景图像?