[python] sqlite och classor och definitioner

Permalänk
Medlem

[python] sqlite och classor och definitioner

[FIXAD] annat problem längre ner på sidan..

Hej alla glada, jag har ett litet problem:
Jag försöker skriva att litet program som jag skall använda för att lägga in svar i en databas med och sedan kunna använda att göra analyser med, men nu har jag stött på ett problem nämligen att jag inte vet hur jag skall göra en SQL förfrågan utan att behöva använda samma kod flera gånger.

så här ser min kod ungefär ut som nu:
Python | #!/usr/bin/env python import sys import sqlite3 - Stupid database!

eller kanske man inte skall ha den koden i en def utan bara ha den i början?
finns det "globala klasser" dvs någon form av avgränsning som kan användas an global kod?

Kom och tänka på en annan sak: att använda en sqlite kanske inte är det mest effektiva sättet att hantera data på, tror ni inte att använda CSV (komma separerade världen) vore bättre i det här fallet?

jag tänkte göra det lätt för mig genom att använda sql, med deras "select count(*) from bla where blob = 'true' " och sedan kunna använda det till att göra en dataanalys.

ändrade titlen, var ett o istället för ett e i klasser och samma sak med c och k
Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem

Jag fattar inte riktigt vad det är du vill ha, men här har du en liten wrapper till Sqlite3 som jag gjorde för att slippa skriva all tråkig kod varje gång jag ska göra något snabbt med en databas.

La till ett litet exempel på hur man lämpligtvis bör använda klassen.
Hoppas det hjälper dig iaf lite.

#!/usr/bin/env python """ sql_conn.py - a simple wrapper for python sqlite3 """ import sqlite3 class SQLiteConnection(): def __init__(self, database_name): self.conn = sqlite3.connect(database_name) self.conn.row_factory = sqlite3.Row self.cc = self.conn.cursor() # Returns a list of dicts def _to_dict(self, rows, cursor): """ Internal function for creating a nice list of dicts """ ls = [] for row in rows: di = {} for n in range(len(row)): di[cursor[n][0]] = row[n] ls.append(di) return ls def query(self, sql, values=[]): """ Performs a query on the db. Don't forget to commit! """ try: self.cc.execute(sql, values) if sql.startswith('SELECT'): return self._to_dict(self.cc.fetchall(), self.cc.description) return None except: print("Could not complete query... No idea why.") return None def get_last_insert(self): """ Returns the last thing inserted into the db """ result = self.cc.execute( 'SELECT * FROM test WHERE x==(?)', (self.cc.lastrowid,)) return self._to_dict(self.cc.fetchall(), self.cc.description)[0] def commit(self): """ Commit! """ self.conn.commit() def close(self): """ Closes the db connection """ self.cc.close() ############################################################################### # Usage example # ############################################################################### # Create connection with db. If no db is found one will be created db = SQLiteConnection("databas.sqlite") # Create a table in the db db.query("CREATE TABLE test(name TEXT, age INT)") # Insert some stuff db.query("INSERT INTO test(name, age) VALUES (?,?)", ("Dagon", 1349)) db.query("INSERT INTO test(name, age) VALUES (?,?)", ("Hydra", 1337)) db.query("INSERT INTO test(name, age) VALUES (?,?)", ("Satan", 666)) db.commit() # Get the stuff back out again creatures = db.query("SELECT * FROM test") for creature in creatures: print("Name:%s Age:%d" % (creature["name"], creature["age"]))

Permalänk
Medlem

ÅÅÅHHHH GLÖM MIG JAG ÄR DUM I HUVUDET...
hittade svaret: Class and Object Variables
man skall visst använda sig av:

classNamn.varabel = Värde =_=

Ignorera resten...

Tack men jag la bara all DB kod föst i scriptet....

nu har jag istället ett annat problem, som inte direkt är relaterat till DB saker men men...
::::::::::::::::
försöker skapa en class som skall innehålla alla frågor sam skall läggas in i databasen:
Python | #!/usr/bin/env python3.1 """ This file contains - I do not understand this global and local thing.
här stötte jag på problem:
när jag kallar awnserSheet.questionAndReturn() sä får jag följande fel:

>>> awnserSheet.questionAndReturn() Fråga 1: Tror du på en/flera personlig(a) gud/gudar? svara med 1 för sant och 0 för falskt:1 !!! the input is invalid !!! !!! Try again !!! Traceback (most recent call last): File "<stdin>", line 1, in <module> File "awnser_cheet.py", line 118, in questionAndReturn awnserSheet.question1() File "awnser_cheet.py", line 62, in question1 awnserSheet.addToSqlString(q) File "awnser_cheet.py", line 52, in addToSqlString sqlString = sqlString + " " + q + ", " NameError: global name 'sqlString' is not defined

Vilket jag inte förstår vad fan som händer.

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem

skippa global, första argumentet till dina metoder tar in (implicit) objektet själv, så ex:

class foo: bar = "foobar" def foo(self): return self.bar

Alltså:

def addToSqlString(self, q): """ This function just adds to the sqlstring the value of q """ self.sqlString = self.sqlString + " " + q + ", "

Fö. "answer" inte "awnser"

Visa signatur

The difference between stupidity and genius - the latter has limits

Permalänk
Medlem
Skrivet av Zevon:

skippa global, första argumentet till dina metoder tar in (implicit) objektet själv, så ex:

class foo: bar = "foobar" def foo(self): return self.bar

Alltså:

def addToSqlString(self, q): """ This function just adds to the sqlstring the value of q """ self.sqlString = self.sqlString + " " + q + ", "

Fö. "answer" inte "awnser"

Bah....
stavfel dit och dit...
skall fixa innan jag blir färdig( hoppas jag)...

det är ände bara jag som kommer kolla på koden, innan jag är färdig dvs, då kommer jag att lägga upp sqlite filen med programmet på min blag.

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix