我正在研究GUI网格和SQL。我有两个GUI按钮可以点击,具体取决于用户想要信息的顺序。订单可以是员工Last_name
或First_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"
答案 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”是非常不同的。将串联的结果打印到屏幕上,如果您很难从代码中看到它,请查看它们