Printing a properly formatted SQLite table in Python
我编写了一个python脚本来向我的表中添加行。我决定,如果我也可以使用相同的脚本查看我的表,而不必退出脚本并运行sqlite3,或者切换到另一个shell并运行sqlite3,那就更好了。所以我写下了我所期望的会给我我想要的东西,它有点…这是相关脚本的一部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import sqlite3 conn = sqlite3.connect('stu.db') c = conn.cursor() var = 1 while var == 1: enquiry = raw_input("What would you like to do?>") enquiry == 'stu db' or enquiry == 'sd': c.execute("SELECT * FROM stu") conn.commit |
在sqlite3中,当您运行select*from stu时,会得到一个格式良好的表,其中有统一的行和列。当我在这里运行它时,我会得到一个长的信息列表,在括号中。看起来有点像这样(我没有打印实际结果,因为这违反了一些联邦法律):
1 | [(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None)] |
我想我知道发生了什么事。python只是在吐出查询返回到sqlite的内容,但是有没有一种方法来格式化这些信息,使其易于阅读?
您可以使用
1 | print pd.read_sql_query("SELECT * FROM stu", conn) |
示例程序(python 2.7.6,pandas 0.18.0):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import sqlite3 import pandas as pd conn = sqlite3.connect(':memory:') c = conn.cursor() c.execute('create table stu ( ID, Name, ShoeSize, Course, IQ, Partner )') conn.commit() c.executemany('insert into stu VALUES (?, ?, ?, ?, ?, ?)', [(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None)]) conn.commit() # Ugly way print list(c.execute("SELECT * FROM stu")) # Pretty way print pd.read_sql_query("SELECT * FROM stu", conn) |
结果,包括丑陋和美丽的输出:
1 2 3 4 5 6 7 8 9 10 11 12 | [(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None)] ID Name ShoeSize Course IQ Partner 0 1234567890 John Doe 3852 DEGR-AA 4 None 1 1234567890 John Doe 3852 DEGR-AA 4 None 2 1234567890 John Doe 3852 DEGR-AA 4 None 3 1234567890 John Doe 3852 DEGR-AA 4 None 4 1234567890 John Doe 3852 DEGR-AA 4 None 5 1234567890 John Doe 3852 DEGR-AA 4 None 6 1234567890 John Doe 3852 DEGR-AA 4 None 7 1234567890 John Doe 3852 DEGR-AA 4 None 8 1234567890 John Doe 3852 DEGR-AA 4 None 9 1234567890 John Doe 3852 DEGR-AA 4 None |
我过去这样做的方法就是简单地使用熊猫数据帧。
1 2 3 4 5 | import pandas as pd data = [(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None), (1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None),(1234567890, u'John Doe', 3852, u'DEGR-AA', 4, None)] pd.DataFrame(data) |