2013-04-29 11 views

Odpowiedz

9

Tak, sqlalchemy ma stworzyć bazę dla you.I potwierdził to na Windows przy użyciu tego kodu

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

, więc jeśli baza danych sqlite jest istniejącym plikiem w tym katalogu, który wskazujesz, to wywoła to zamiast tego? Tzn .: jeśli istnieje, połącz się z nim, w przeciwnym razie utwórz go. Czy mam rację, mówiąc to? –

+0

Absolutnie, okazało się, że tak jest. – Gandalf

3

znalazłem (przy użyciu SQLite + pysqlite), że jeśli katalog istnieje, to będzie ją tworzyć, ale jeśli katalog nie istnieje, to zgłasza wyjątek:

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

Moje obejście jest to zrobić, choć czuje brzydki:

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

W tym przypadku prawdopodobnie wydrukowałbym wiadomość do użytkownika, który mówi: "Przepraszam, nie mogę utworzyć bazy danych FOO, ponieważ BAR katalogowy nie istnieje." Następnie, jeśli użytkownik chce go utworzyć i kontynuować, może. –

+0

Dla aplikacji interaktywnej, która jest w porządku, ale chcę, aby to działało w kontekście ciągłej integracji. – danio

+1

Gdy katalogi istnieją, będzie działać w ciągłej integracji. Musisz zdecydować, czy brakujący katalog jest błędem i wymaga interwencji użytkownika (w takim przypadku generujesz komunikat o błędzie i poddajesz się) lub czy brakujący katalog jest tylko ostrzeżeniem lub drobnym wyjątkiem, w którym to przypadku tworzysz (być może cały łańcuch z) katalogów i kontynuuj, co, jak mówisz, jest "nieprzyjemne". Możesz też skonfigurować ... –

Powiązane problemy