vegetassj2
21-04-2009, 14:30
Ciao a tutti,
avrei bisogno di qualche input:)
Sto scrivendo una classe per potermi rendere più comodo l'interfacciamente con sqlite; nello specifico vorrei realizzare una specie di ORM, in modo da legare dei modelli definiti con delle classi a delle tabelle sul db per poi poterci fare delle operazioni. Per chi conosce Django, l'idea è creare qualcosa di simile al loro ORM, anche se molto più semplice.
Il problema è che ho delle GROSSE carenze sul design, quindi vorrei qualche suggerimento da voi su come strutturare il tutto.
Ecco qua quello che fin'ora ho realizzato:
#!/usr/bin/env python
import sqlite3
import sys
import os
from __future__ import with_statement
class Db():
def __init__(self, dbname = ':memory:'):
tables = []
try:
db = sqlite3.connect(dbname)
except sqlite3.Error, e:
print 'An error occurred:', e.args[0]
def addTable(self, schema):
table = self.Table(db,schema)
tables.append(table)
return
def dropTable(self,schema):
table = self.Table(db,schema)
table.delete()
return
class Table():
def __init__(self, db, schema = None):
tableName = str(schema)
try:
conn = db.cursor()
with conn:
conn.execute('SELECT tbl_name FROM sqlite_master')
tables = conn.fetch()
if table == tableName:
conn.execute("pragma table_info(%s)" %tableName)
return conn.fetchall()
return self.createTable(conn, schema)
except sqlite3.Error:
print 'Sqlite error:',e.args[0]
return None
def createTable(self,conn, object = None):
fields = [field for field in dir(object) if callable(getattr(object, field))]
'''
dalla lista dei field, che sono gli elementi della mia classe modello,
devo creare lo statement sql per creare la tabella e restituire poi il pragma
'''
def delete(self, filter):
pass
nello specifico non so come vadano creati i vari statement a partire dall'elenco dei metodi che ottengo con la funzione getattr.
avrei bisogno di qualche input:)
Sto scrivendo una classe per potermi rendere più comodo l'interfacciamente con sqlite; nello specifico vorrei realizzare una specie di ORM, in modo da legare dei modelli definiti con delle classi a delle tabelle sul db per poi poterci fare delle operazioni. Per chi conosce Django, l'idea è creare qualcosa di simile al loro ORM, anche se molto più semplice.
Il problema è che ho delle GROSSE carenze sul design, quindi vorrei qualche suggerimento da voi su come strutturare il tutto.
Ecco qua quello che fin'ora ho realizzato:
#!/usr/bin/env python
import sqlite3
import sys
import os
from __future__ import with_statement
class Db():
def __init__(self, dbname = ':memory:'):
tables = []
try:
db = sqlite3.connect(dbname)
except sqlite3.Error, e:
print 'An error occurred:', e.args[0]
def addTable(self, schema):
table = self.Table(db,schema)
tables.append(table)
return
def dropTable(self,schema):
table = self.Table(db,schema)
table.delete()
return
class Table():
def __init__(self, db, schema = None):
tableName = str(schema)
try:
conn = db.cursor()
with conn:
conn.execute('SELECT tbl_name FROM sqlite_master')
tables = conn.fetch()
if table == tableName:
conn.execute("pragma table_info(%s)" %tableName)
return conn.fetchall()
return self.createTable(conn, schema)
except sqlite3.Error:
print 'Sqlite error:',e.args[0]
return None
def createTable(self,conn, object = None):
fields = [field for field in dir(object) if callable(getattr(object, field))]
'''
dalla lista dei field, che sono gli elementi della mia classe modello,
devo creare lo statement sql per creare la tabella e restituire poi il pragma
'''
def delete(self, filter):
pass
nello specifico non so come vadano creati i vari statement a partire dall'elenco dei metodi che ottengo con la funzione getattr.