Code verstehen - sqlite3

Devanther

Top Contributor
Code:
import sqlite3

db = sqlite3.connect("accounts.sqlite")
db.execute("CREATE TABLE IF NOT EXISTS accounts (name TEXT PRIMARY KEY NOT NULL, balance INTEGER NOT NULL)")
db.execute("CREATE TABLE IF NOT EXISTS transactions (time TIMESTAMP NOT NULL,"
           " account TEXT NOT NULL, amount INTEGER NOT NULL, PRIMARY KEY (time, account))")


class Account(object):

    def __init__(self, name: str, opening_balance: int = 0):
        cursor = db.execute("SELECT name, balance FROM accounts WHERE (name = ?)", (name,))
        row = cursor.fetchone()

        if row:
            self.name, self._balance = row
            print("Retrieved record for {}. ".format(self.name), end='')
        else:
            self.name = name
            self._balance = opening_balance
            cursor.execute("INSERT INTO accounts VALUES(?, ?)", (name, opening_balance))
            cursor.connection.commit()
            print("Account created for {}. ".format(self.name), end='')
        self.show_balance()

    def deposit(self, amount: int) -> float:
        if amount > 0.0:
            self._balance += amount
            print("{:.2f} deposited".format(amount / 100))
        return self._balance / 100

    def withdraw(self, amount: int) -> float:
        if 0 < amount <= self._balance:
            self._balance -= amount
            print("{:.2f} withdrawn".format(amount / 100))
            return amount / 100
        else:
            print("The amount must be greater than zero and no more than your account balance")
            return 0.0

    def show_balance(self):
        print("Balance on account {} is {:.2f}".format(self.name, self._balance / 100))

if __name__ == '__main__':
    john = Account("John")
    john.deposit(1010)
    john.deposit(10)
    john.deposit(10)
    john.withdraw(30)
    john.withdraw(0)
    john.show_balance()

    terry = Account("Terry")
    graham = Account("Graham", 9000)
    eric = Account("Eric", 7000)

    db.close()


Hallo,
ich verstehe leider nicht alles.

print("Retrieved record for {}. ".format(self.name), end='') ---------------------- was bedeutet das end='') .....?

def deposit(self, amount: int) -> float: ----------------- was wird da gemacht?

if __name__ == '__main__': -------------- was bedeutet diese Zeile? Was wird da gemacht?

row = cursor.fetchone() ------ was heisst das?

cursor.connection.commit() ----- was heisst das?


Ich habe erst Java gelernt und bin grade dabei Python zu lernen.
Irgendwie finde ich Java zwar umständlicher aber logischer und einfacher zu verstehen -.-

Wäre gut, wenn sich jemand paar Minuten Zeit nehmen würde.
 

M.L.

Top Contributor
Also ein Teil der Befehle lässt sich recherchieren:
def deposit(self, amount: int) -> float: ----------------- was wird da gemacht?
eine Methode namens deposit und Datentyp float wird definiert
if __name__ == '__main__': -------------- was bedeutet diese Zeile? Was wird da gemacht?
Das hängt mit dem Importieren von (fremdem) Code zusammen: https://www.python-forum.de/viewtopic.php?t=17226
row = cursor.fetchone() ------ was heisst das?
https://thepythonguru.com/fetching-records-using-fetchone-and-fetchmany/ (das könnte auch i.Z. mit SQLite zum Einsatz kommen)
cursor.connection.commit() ----- was heisst das?
(geraten) explizit, das der commit-Befehl ausgeführt wird.

Irgendwie finde ich Java zwar umständlicher aber logischer und einfacher zu verstehen -.-
Die Anspielung auf "Monty Python" kommt nicht von ungefähr....
 

Devanther

Top Contributor
print("Retrieved record for {}. ".format(self.name), end='') ---------------------- was bedeutet das end='') .....?

das noch.

if __name__ == '__main__': -------------- kannst du mir das mal in verständlichen Worten erklären, ich verstehe das in deinem Link nicht -.-

row = cursor.fetchone() -------- habe ich verstanden.

cursor.connection.commit() ------- ja aber was macht der commit() Befehl?
 
K

kneitzel

Gast
print("Retrieved record for {}. ".format(self.name), end='') ---------------------- was bedeutet das end='') .....?

das noch.

if __name__ == '__main__': -------------- kannst du mir das mal in verständlichen Worten erklären, ich verstehe das in deinem Link nicht -.-

row = cursor.fetchone() -------- habe ich verstanden.

cursor.connection.commit() ------- ja aber was macht der commit() Befehl?

Also das erste mit __main__:
Das Phyton Programm wird entweder direkt ausgeführt oder ein anderes Programm möchte den Code nutzen. Damit gewisse Dinge nicht ausgeführt werden, wenn ein anderes Programm das Script lädt, wird so eine Abfrage eingebaut.

Und commit hängt mit Transaktionen zusammen. Wenn man mehrere Operationen durchführt, dann kann man Transaktionen verwenden, damit entweder alles oder eben nichts ausgeführt wird. Beispiel Überweisung:
Deinem Konto werden 100€ abgezogen.
Meinem Konto werden 100€ hinzugefügt.
Stell Dir vor, nach der ersten Aktion passiert etwas. Dann darf es natürlich nicht sein, dass Dir das Geld abgezogen wurde. Daher gibt es die Transaktionen. So wird durchgeführt:
Transaktionsstart
- 100€ bei deinem Konto abziehen
- 100€ bei meinem Konto hinzufügen
Commit (=Ende der Transaktion)
 

Ähnliche Java Themen

Neue Themen


Oben