2013-04-29 10 views
8

existiert ich sqlalchemy ich versuche, und ich bin mit diesem Verbindungszeichenfolge meiner Datenbankensqlalchemy, Erstellen einer SQLite-Datenbank, wenn es nicht

engine = create_engine('sqlite:///C:\\sqlitedbs\\database.db') 
verbinden

Ist für Sie eine SQLite-Datenbank sqlalchemy erstellen, wenn man nicht bereits in einem Verzeichnis vorhanden, das die Datenbankdatei holen soll ?.

Antwort

9

Ja, tut sqlalchemy eine Datenbank erstellen für you.I es auf windows bestätigt diesen Code mit

from sqlalchemy import create_engine, ForeignKey 
from sqlalchemy import Column, Date, Integer, String 
from sqlalchemy.ext.declarative import declarative_base 

engine = create_engine('sqlite:///C:\\sqlitedbs\\school.db', echo=True) 
Base = declarative_base() 


class School(Base): 

    __tablename__ = "woot" 

    id = Column(Integer, primary_key=True) 
    name = Column(String) 


    def __init__(self, name): 

     self.name = name  


Base.metadata.create_all(engine) 
+1

Wenn also die SQLite-Datenbank eine vorhandene Datei in dem Verzeichnis ist, auf das Sie zeigen, wird sie stattdessen aufgerufen? Dh: Wenn es existiert, verbinden Sie sich mit ihm, sonst schaffen Sie es. Habe ich Recht, das zu sagen? –

+0

Absolut, ich fand, dass das der Fall ist. – Gandalf

3

I (mit SQLite + pysqlite) festgestellt, dass, wenn das Verzeichnis vorhanden ist, es es schaffen wird, aber wenn wird das Verzeichnis nicht vorhanden löst eine Ausnahme:

OperationalError: (sqlite3.OperationalError) unable to open database file 

Meine Abhilfe ist, dies zu tun, auch wenn es böse fühlt:

if connection_string.startswith('sqlite'): 
     db_file = re.sub("sqlite.*:///", "", connection_string) 
     os.makedirs(os.path.dirname(db_file), exist_ok=True) 
    self.engine = sqlalchemy.create_engine(connection_string) 
+0

Richtig, in diesem Fall würde ich wahrscheinlich nur eine Nachricht an den Benutzer drucken, die sagt: "Tut mir leid, ich kann Datenbank FOO nicht erstellen, weil Verzeichnis BAR nicht existiert." Wenn der Benutzer es dann erstellen und fortfahren möchte, können sie dies tun. –

+0

Für eine interaktive App, die in Ordnung ist, aber ich möchte auch, dass dies in einem kontinuierlichen Integrationskontext funktioniert – danio

+1

Sobald die Verzeichnisse existieren, wird es in der kontinuierlichen Integration arbeiten. Sie müssen entscheiden, ob das fehlende Verzeichnis ein Fehler ist und einen Benutzereingriff erfordert (in diesem Fall erzeugen Sie eine Fehlermeldung und geben auf) oder ob ein fehlendes Verzeichnis nur eine Warnung oder eine kleine Ausnahme ist. In diesem Fall erstellen Sie (möglicherweise eine ganze Kette) von) Verzeichnissen und mach weiter, was, wie du sagst, "böse" ist. Oder Sie machen es konfigurierbar ... –

Verwandte Themen