如何在sql中连接ORDER BY

时间:2017-12-12 23:36:33

标签: python sql database concatenation

我正在研究GUI网格和SQL。我有两个GUI按钮可以点击,具体取决于用户想要信息的顺序。订单可以是员工Last_nameFirst_name,但不能同时是两者。我不知道如何使用它。我想使用连接,但我不知道如何。

以下是我尝试做的事情:

def sort_employees(self, column):
    try:
        cursor = db.cursor()
        display="SELECT * FROM company ORDER BY  '%" + column + "%' "
        cursor.execute(display)
        entry = cursor.fetchall()
        self.display_rows(entry)

此外,如果我只在条目上,代码可以正常工作:

display="SELECT * FROM company ORDER BY Last_name"

2 个答案:

答案 0 :(得分:0)

不确定为什么您的查询字符串中包含%,您可能会将其与%s syntax for string formatting混淆。

display = "SELECT * FROM company ORDER BY  '%" + column + "%' "

看起来你想要的更像是这样:

display = "SELECT * FROM company ORDER BY " + column

或者,我更喜欢:

display = 'SELECT * FROM company ORDER BY {column}'.format(column=column)

当然要小心创建这样的查询,否则会暴露给SQL安全漏洞。

最好使用参数化查询而不是字符串插值/连接,但我不知道您正在使用哪个数据库界面,但很容易找到搜索文档。

答案 1 :(得分:0)

在SQL中,ORDER BY子句作为参数采用列名列表:

--correct 
ORDER BY firstname, lastname, age

它也可以带功能输出:

--correct, sort names beginning with a Z first
ORDER BY CASE WHEN first name LIKE 'Z%' THEN 1 ELSE 2 END, firstname

在某个数据库中,输入整数序数将按该列排序,从左侧开始编号,从1开始:

--correct, sort by 3rd column then first
ORDER BY 3,1

它不会包含碰巧包含列名的字符串列表:

--incorrect - not necessarily a syntax error but will not sort by any named column
ORDER BY 'firstname', 'lastname', 'age'

也不需要一串csv列名:

--incorrect - again not necessarily a syntax error but won't sort on any of the named columns
ORDER BY 'firstname, lastname, age'

您的代码属于后面的类别:您将列名称转换为字符串。这是错的。 “不工作的sql”和“工作的sql”是非常不同的。将串联的结果打印到屏幕上,如果您很难从代码中看到它,请查看它们