2012-05-26 16 views
14

sqlalchemy kullanarak mysql'de bir db oluşturmalıyım, zaten var ise bir db'ye bağlanabiliyorum, ancak eğer mevcut değilse onu oluşturabilmek istiyorum.sqlchemy ile db mysql nasıl oluşturulur

#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

Teşekkürler, şimdi db'yi oluşturabilirim, dbin ilerlemesinin varlığını kontrol etmenin bir yolu var mı? Sadece deneme yapmayı düşünebilirim – arpho

cevap

28

sadece sunucusuna bağlanmak bir mysql veritabanı oluşturmak bir veritabanı oluşturmak için:: Kullanıcınızda

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

tabii

veritabanları oluşturma iznine sahip bu benim tablolardır.

10
CREATE DATABASE IF NOT EXISTS dbName; 
2

ben kurallı yoldur bilmiyorum, ama burada bir veritabanı Veritabanı listesine karşı kontrol ederek olup olmadığını görmek için kontrol etmek ve bu yoksa bunu oluşturmak için bir yoldur.

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

Veritabanının oluşturulup oluşturulmadığını bilmeniz gerekmiyorsa, alternatif bir yöntem.

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)) 
İlgili konular