2012-05-26 14 views
14

Potrzebuję utworzyć db w mysql przy użyciu sqlalchemy, jestem w stanie połączyć się z db, jeśli już istnieje, ale chcę móc go utworzyć, jeśli nie istnieje. to są moje tabel:howto tworzenie db mysql z sqlalchemy

#def __init__(self): 
Base = declarative_base() 

class utente(Base): 
    __tablename__="utente" 
    utente_id=Column(Integer,primary_key=True) 
    nome_utente=Column(Unicode(20)) 
    ruolo=Column(String(10)) 
    MetaData.create_all() 

    def __repr(self): 
     return "utente: {0}, {1}, id: {2}".format(self.ruolo,self.nome_utente,self.utente_id) 


class dbmmas(Base): 

    __tablename__="dbmmas" 
    db_id=Column(Integer,primary_key=True,autoincrement=True) 
    nome_db=Column(String(10)) 
    censimento=Column(Integer) 
    versione=Column(Integer) 
    ins_data=Column(DateTime) 
    mod_data=Column(DateTime) 
    ins_utente=Column(Integer) 
    mod_utente=Column(Integer) 
    MetaData.create_all() 

    def __repr(self): 
     return "dbmmas: {0}, censimento {1}, versione {2}".format(self.nome_db,self.censimento,self.versione)  

class funzione(Base): 
    __tablename__="funzione" 
    funzione_id=Column(Integer,primary_key=True,autoincrement=True) 
    categoria=Column(String(10)) 
    nome=Column(String(20)) 
    def __repr__(self): 
     return "funzione:{0},categoria:{1},id:{2} ".format(self.nome,self.categoria,self.funzione_id) 

class profilo(Base): 
    __tablename__="rel_utente_funzione" 
    utente_id=Column(Integer,primary_key=True) 
    funzione_id=Column(Integer,primary_key=True) 
    amministratore=Column(Integer) 
    MetaData.create_all() 

    def __repr(self): 
     l=lambda x: "amministratore" if x==1 else "generico" 
     return "profilo per utente_id:{0}, tipo: {1}, funzione_id: {2}".format(self.utente_id,l(self.amministratore),self.funzione_id)  

class aree(Base): 
    __tablename__="rel_utente_zona" 
    UTB_id=Column(String(10), primary_key=True) # "in realta' si tratta della seatureSignature della feature sullo shapefile" 
    utente_id=Column(Integer, primary_key=True) 
    amministratore=Column(Integer) 
    MetaData.create_all() 
    def __repr(self): 
     l=lambda x: "amministratore" if x==1 else "generico" 
     return "zona: {0}, pe utente_id:{1}, {2}".format(self.UTB_id,self.utente_id,l(self.amministratore)) 

class rel_utente_dbmmas(Base): 
    __tablename__="rel_utente_dbmmas" 
    utente_id=Column(Integer,primary_key=True) 
    db_id=Column(Integer,primary_key=True) 
    amministratore=(Integer) 
    MetaData.create_all() 
    def __repr(self): 
     l=lambda x: "amministratore" if x==1 else "generico" 
     return "dbregistrato: {0} per l'utente{1} {2}".format(self.db_id,self.utente_id,l(self.amministratore)) 
+0

Dzięki, teraz mogę utworzyć db, czy istnieje sposób na sprawdzenie istnienia zaliczki dbin? Mogę myśleć tylko o użyciu try – arpho

Odpowiedz

28

Aby utworzyć bazę danych mysql po prostu połączyć się z serwerem utworzenia bazy danych:

import sqlalchemy 
engine = sqlalchemy.create_engine('mysql://user:[email protected]') # connect to server 
engine.execute("CREATE DATABASE dbname") #create db 
engine.execute("USE dbname") # select new db 
# use the new db 
# continue with your work... 

oczywiście użytkownik ma mieć uprawnienie do tworzenia baz danych.

2

nie wiem co kanoniczny sposób jest, ale oto sposób sprawdzić, czy baza danych istnieje, sprawdzając na liście baz danych oraz do tworzenia go, jeśli nie istnieje.

from sqlalchemy import create_engine 

# This engine just used to query for list of databases 
mysql_engine = create_engine('mysql://{0}:{1}@{2}:{3}'.format(user, pass, host, port)) 

# Query for existing databases 
existing_databases = mysql_engine.execute("SHOW DATABASES;") 
# Results are a list of single item tuples, so unpack each tuple 
existing_databases = [d[0] for d in existing_databases] 

# Create database if not exists 
if database not in existing_databases: 
    mysql_engine.execute("CREATE DATABASE {0}".format(database)) 
    print("Created database {0}".format(database)) 

# Go ahead and use this engine 
db_engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}'.format(user, pass, host, port, db)) 

Oto alternatywna metoda, jeśli nie trzeba wiedzieć, czy baza danych została utworzona, czy nie.

from sqlalchemy import create_engine 

# This engine just used to query for list of databases 
mysql_engine = create_engine('mysql://{0}:{1}@{2}:{3}'.format(user, pass, host, port)) 

# Query for existing databases 
mysql_engine.execute("CREATE DATABASE IF NOT EXISTS {0} ".format(database)) 

# Go ahead and use this engine 
db_engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}'.format(user, pass, host, port, db)) 
Powiązane problemy