python - 对 SQL 结果进行排序以提高可读性?

标签 python mysql sql-server database

致新观众:此问题已解决

我需要更改 SQL 查询结果的视觉布局,并且我不能使用外部库,只能使用 python/idle。

我正在制作一个程序,该程序应该接受用户的选择并从中构造一个 SQL 语句,该语句将查询数据库,并为用户提供所有匹配的结果。有关键字搜索,用户可以指定在哪一列中搜索关键字。这些都不让我担心,我实际上陷入了不同的困境:

我的数据库只有一张表,有 9 列,全部都是字符或整数。为了测试的目的,我只输入了三个“记录”。在适当的数据库中,大约有一百多个。例如查询数据库,如下所示:

select distinct label,format,catnum,year,artist,relname from testtable

给出这个:

[('PENN', 'LP', '002', '1972', 'Frank Penn', "'72"), ('GBI', 'LP', '104', '1974', 'The Mustangs', 'On Tha Rocks'), ('GBI', 'Single', '235', '1978', 'Willpower', 'Love Makes It Alright')]

我很高兴知道当我输出 SQL 查询结果时如何输出 ONE RECORD PER LINE,如下所示:

[('PENN', 'LP', '002', '1972', 'Frank Penn', "'72"), 
('GBI', 'LP', '104', '1974', 'The Mustangs', 'On Tha Rocks'), 
('GBI', 'Single', '235', '1978', 'Willpower', 'Love Makes It Alright')]

或者,更好的是,像这样,删除语音标记和方括号:

(PENN, LP, 002, 1972, Frank Penn, '72), 
(GBI, LP, 104, 1974, The Mustangs, On Tha Rocks), 
(GBI, Single, 235, 1978, Willpower, Love Makes It Alright)

这是迄今为止我的代码:

import sqlite3

conn = sqlite3.connect(':memory:')

cursor = conn.cursor()

cursor.execute("""CREATE TABLE testtable (
        label char,
        format char,
        catnum char,
        sidecat char,
        year char,
         artist char,
        relname char,
        trackname char,
        composer char,
        collection int
        )""")

conn.commit()

cursor.execute('''INSERT INTO testtable VALUES ("PENN", "LP", "002", "002 (B)", "1972", "Frank Penn", "'72", "The Time For Loving Is Now", "Frank Penn", 1)''')
conn.commit()
cursor.execute('''INSERT INTO testtable VALUES ("GBI", "LP", "104", "104 (B)", "1974", "The Mustangs", "On Tha Rocks", "Someday We'll Be Together", "Unknown", 1)''')
conn.commit()
cursor.execute('''INSERT INTO testtable VALUES ("GBI", "Single", "235", "235 (B)", "1978", "Willpower", "Love Makes It Alright", "The Mail", "Eddie Minnis", 1)''')
conn.commit()


cursor.execute("select distinct label,format,catnum,year,artist,relname from testtable")
print(cursor.fetchall())


conn.close()

编辑:这是我根据用户 nikpod 的建议实现的解决方案:

cursor.execute("select distinct label,format,catnum,year,artist,relname from testtable")
foo = cursor.fetchall()
foo = (str(foo).replace("), ","),\n").strip('[]'))
print(foo)
conn.close()

给予:

('PENN', 'LP', '002', '1972', 'Frank Penn', "'72"),
('GBI', 'LP', '104', '1974', 'The Mustangs', 'On Tha Rocks'),
('GBI', 'Single', '235', '1978', 'Willpower', 'Love Makes It Alright')

我发现可以使用“替换”命令来删除几乎所有不需要的内容:

foo = (str(foo).replace("), ","),\n").strip('[]'))
foo = (str(foo).replace("('",""))
foo = (str(foo).replace('("',""))
foo = (str(foo).replace("',",","))
foo = (str(foo).replace(", '",", "))
foo = (str(foo).replace("'),",""))
foo = (str(foo).replace("')",""))
foo = (str(foo).replace('", ',", "))
foo = (str(foo).replace(', "',", "))
foo = (str(foo).replace('"),',""))

当然,使用了很多行代码,但总体思路才是重要的。使用这样的东西,您可以使输出更好一点:

PENN, LP, 002, 1972, Frank Penn, '72
GBI, LP, 104, 1974, The Mustangs, On Tha Rocks
GBI, Single, 235, 1978, Willpower, Love Makes It Alright

感谢大家的意见,本来这个问题的措辞很糟糕

最佳答案

您应该将元组列表打印为字符串并根据您的要求对其进行操作。
这是一个仍然包含引号的示例,但满足您的第一个要求:

foo = [('PENN', 'LP', '002', '1972', 'Frank Penn', "'72"), ('GBI', 'LP', '104', '1974', 'The Mustangs', 'On Tha Rocks'), ('GBI', 'Single', '235', '1978', 'Willpower', 'Love Makes It Alright')]
print(str(foo).replace("), ","),\n").strip('[]'))

这给出了结果:

('PENN', 'LP', '002', '1972', 'Frank Penn', "'72"),
('GBI', 'LP', '104', '1974', 'The Mustangs', 'On Tha Rocks'),
('GBI', 'Single', '235', '1978', 'Willpower', 'Love Makes It Alright')

关于python - 对 SQL 结果进行排序以提高可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47898271/

相关文章:

python - django 翻译模板 {% trans "something"%}

Python websockets 模块和 IIS 作为反向代理

php - 在 codeigniter 中搜索查询

php - 高效安全的查询思路——mysql

sql-server - 缩小 SQL Server 数据库不起作用

php - PDO 是否处理 sql 函数?

python - celery python对象方法

python - 运行扭曲的应用程序时出错

mysql - 使用MySQL处理大型数据集

sql-server - 如何在 SQL Server 2008 中查询 XML 列