2016-04-27 52 views
0
class DatabaseManager(object): ##Ignore the indentation## 
def __init__(self, db): 
    self.conn = sqlite3.connect(db) 
    self.conn.execute('pragma foreign_keys = on') 
    self.conn.commit() 
    self.c = self.conn.cursor() 


def query_params(self, arg, params=None): 
    self.c.execute(arg, params) 
    self.conn.commit() 
    return self.c 

def query(self, arg): 
    self.c.execute(arg) 
    self.conn.commit() 
    return self.c 

def fetch(self): 
    self.c.fetchall() 
    self.conn.commit() 
    return self.c 

def __del__(self): 
    self.conn.close() 

dbmgr = DatabaseManager("connect.db") 

其他代码 .... .... .... 然后:接收表信息打印到控制台

def read_from_db(): 

    tables = [] 
    query = "SELECT name FROM sqlite_master WHERE type='table'" 
    dbmgr.query(query) 
    rows = dbmgr.fetch() 
    for row in rows: 
     tables.append(row) 
    print (tables) 

我不能弄清楚如何查看我的数据库中的表格,它们是真实的,因为我可以在我的sqlite管理器中看到它们。这用来工作的时候,我没有阶级,只是做了:

def read_from_db(): 

    tables = [] 
    c.execute("SELECT name FROM sqlite_master WHERE type='table'") 
    rows = c.fetchall() 
    for row in rows: 
     tables.append(row) 
    print (tables) 

回答

1

所以,你获取的结果,但从来没有用它做任何事情,然后返回用过的光标...

def fetch(self): 
    self.c.fetchall() # this returns a list of your data 
    self.conn.commit() 
    return self.c 

它也不清楚你在函数

比较你的其他代码犯什么,

rows = c.fetchall() 

所以,你应该只需要

def fetch(self): 
    return self.c.fetchall() 

然后调用它

tables = dbmgr.fetch() 

,或者

tables = dbmgr.query(query).fetchall() 

注意,你正在一个空列表,然后添加列表的元素到名单。您可以通过直接分配表来简化该过程