2016-04-27 8 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") 

その他のコード .... .... を慰めるために印刷するのpython/SQLでテーブル情報を受信して​​:その後、 ....

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() 

だから、唯一次にあなたが、空のリストを作ることに、リストの要素を追加している

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

ノート代わりに、

tables = dbmgr.fetch() 

それを呼び出すか、

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

を必要とすべきですリスト。テーブルを直接割り当てることで、そのプロセスをショートカットできます

関連する問題