Django:在一行中获取原始SQL查询的结果

时间:2016-10-28 08:12:42

标签: sql django postgresql psycopg2

这有效:

connection = get_connection()
cursor=connection.cursor()
cursor.execute('show application_name')
application_name_of_connection=cursor.fetchone()[0]

但是为什么有四条线?有没有办法把它放在一行?

2 个答案:

答案 0 :(得分:2)

不,没有办法在一行中做到这一点。 Python等语言旨在描述一组指令。这里有四条说明。甚至可能有辅助方法或这些语句的巧妙/低效安排可以将这个降低到三行,但你最好保持它的原样。

例如,如果由于某种原因经常使用此代码,您可以将其封装在自己的方法中

def get_application_name_of_connection()
    connection = get_connection()
    cursor=connection.cursor()
    cursor.execute('show application_name')
    return cursor.fetchone()[0]

然后简单地说:

get_application_name_of_connection()

这是它的工作原理。你想要更少的代码?隐藏功能。

答案 1 :(得分:1)

可以通过理解来完成,但是在 sqlite

results = [row[0] for row in get_connection().cursor().execute('select * from mytable')]

如果您使用的是postgresql,那么它不起作用,您可以尝试使用更紧凑的形式:

with get_connection().cursor() as cur:
    cur.execute('show all')
    print cur.fetchone()

但是如果您需要在执行块之后抛弃光标。

我没有尝试其他数据库管理员,结果可能会有所不同。