C'è sqlite3
, incluso in python. Con esso è possibile creare un database (in memoria) e aggiungere righe ad esso ed eseguire query SQL.
Se si desidera pulito funzionalità di ActiveRecord-come si dovrebbe aggiungere un ORM esterno, come sqlalchemy. Questo è un download separato se
esempio rapida utilizzando sqlalchemy:
from sqlalchemy import create_engine, Column, String, Integer, MetaData, Table
from sqlalchemy.orm import mapper, create_session
import csv
CSV_FILE = 'foo.csv'
engine = create_engine('sqlite://') # memory-only database
table = None
metadata = MetaData(bind=engine)
with open(CSV_FILE) as f:
# assume first line is header
cf = csv.DictReader(f, delimiter=',')
for row in cf:
if table is None:
# create the table
table = Table('foo', metadata,
Column('id', Integer, primary_key=True),
*(Column(rowname, String()) for rowname in row.keys()))
table.create()
# insert data into the table
table.insert().values(**row).execute()
class CsvTable(object): pass
mapper(CsvTable, table)
session = create_session(bind=engine, autocommit=False, autoflush=True)
ora è possibile interrogare il database, filtrando da tutto il campo, ecc
Supponiamo si esegue il codice di cui sopra su questo csv:
name,age,nickname
nosklo,32,nosklo
Afila Tun,32,afilatun
Foo Bar,33,baz
che creeranno e popolare una tabella in memoria con campi name
, age
, nickname
. È quindi possibile interrogare la tabella:
for r in session.query(CsvTable).filter(CsvTable.age == '32'):
print r.name, r.age, r.nickname
che creeranno automaticamente ed eseguire una query SELECT
e restituire le righe corrette.
Un altro vantaggio di usare SQLAlchemy è che, se si decide di utilizzare un altro, più potente banca dati, in futuro, è possibile farlo praticamente senza modificare il codice.
Per contrassegnare una risposta come preferita (in realtà: come * la * risposta :) è possibile fare clic sul segno di spunta (✓) proprio sotto il conteggio dei voti della risposta scelta. Ad esempio, al momento, la risposta di nosklo ha 13 voti; proprio sotto il triangolo "voto basso" c'è un debole segno di spunta. Clicca qui – tzot