2012-05-26 13 views
14

Necesito crear un db en mysql usando sqlalchemy, puedo conectarme a un db si ya existe, pero quiero poder crearlo si no existe. esto son mis tablas:cómo crear db mysql con 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

Gracias, ahora puedo crear el db, ¿hay alguna manera de verificar la existencia del avance de dbin? Solo puedo pensar en usar try – arpho

Respuesta

28

Para crear una base de datos mysql que acaba de conectar al servidor crear una base de datos:

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... 

por supuesto, su usuario tiene que tener el permiso para crear bases de datos.

10
CREATE DATABASE IF NOT EXISTS dbName; 
2

No sé cuál es la forma canónica es, pero aquí es una manera de comprobar para ver si existe una base de datos mediante la comprobación con la lista de bases de datos, y para crearlo si no existe.

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)) 

Aquí hay un método alternativo si no necesita saber si la base de datos se creó o no.

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)) 
Cuestiones relacionadas