danke für deine tipps, passt trotzdem nicht :
Code: Alles auswählen
cursor.execute("INSERT INTO edelmetallpreise (gold, palladium, datum) VALUES (?,?,?)",(gold_preis, palladium_preis, datum))
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
ich hoffe, du bist mir nicht böse, aber "edelmetallpreise" als zweites argument/parameter zu verwenden verursacht bei mir kopfgulasch, weil die tabelle auch so heißt. ich habe das geändert:
Code: Alles auswählen
#!/usr/bin/env python3
import sqlite3, csv
from babel.numbers import parse_decimal
from dateutil.parser import parse
# datenbank
TABLE_NAME = "edelmetallpreise"
DB_PATH = f"E:\\APPDATA\\Atom\\Python\\Data\\{TABLE_NAME}.db"
#csv-datei
CSV_PATH = f"E:\\APPDATA\\Atom\\Python\\Data\\{TABLE_NAME}.csv"
def read_csv_file(file_path):
""" Funktion zum Auslesen einer csv-Datei
zurückgegeben wird ein Dictionary """
with open(file_path) as csvdatei:
dict_reader = csv.DictReader(csvdatei)
return list(dict_reader)
def csvdata_to_db(db_path, table_name, csv_data):
""" Trägt die Daten aus der csv-Datei in die Datenbank ein."""
connection = sqlite3.connect(db_path)
cursor = connection.cursor()
cursor.execute(f"CREATE TABLE IF NOT EXISTS {table_name} (id INT PRIMARY KEY, gold DECIMAL, palladium DECIMAL, datum DATE)")
for dataset in csv_data:
gold_preis = parse_decimal(dataset['gold'], locale='en')
palladium_preis = parse_decimal(dataset['palladium'], locale='en')
datum = parse(dataset['datum'])
cursor.execute(f"INSERT INTO {table_name} (gold, palladium, datum) VALUES (?,?,?)",(gold_preis, palladium_preis, datum))
connection.commit()
connection.close()
print (f"Die DB {db_path} wurde mit der Tabelle {table_name} samt Daten erfolgreich angelegt.")
def main():
csvdata = read_csv_file(CSV_PATH)
csvdata_to_db(DB_PATH,TABLE_NAME, csvdata)
if __name__ == '__main__':
main()
mit:
Code: Alles auswählen
datum = parse(dataset['datum'])
ist es nun "unsinnig" folgenden code noch anzufügen: datum=datum.date() ?
und danke für deine tipps und deine zeit, Sirius3
so long