2012-05-26 12 views
14

के साथ बनाने के लिए मुझे sqlalchemy का उपयोग करके mysql में एक डीबी बनाने की आवश्यकता है, मैं पहले से मौजूद होने पर डीबी से कनेक्ट करने में सक्षम हूं, लेकिन अगर यह अस्तित्व में नहीं है तो मैं इसे बनाने में सक्षम होना चाहता हूं।कैसे db mysql को 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

धन्यवाद, अब मैं डीबी बना सकता हूं, क्या डबिन अग्रिम के अस्तित्व की जांच करने का कोई तरीका है? मैं केवल कोशिश का उपयोग करने के लिए सोच सकते हैं – arpho

उत्तर

28

एक mysql डेटाबेस तुम सिर्फ सर्वर से कनेक्ट बनाने एक डेटाबेस बनाने के लिए::

निश्चित रूप से
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... 

आपके उपयोगकर्ता ने डेटाबेस बनाने की अनुमति के लिए यह मेरा तालिकाओं कर रहे हैं।

2

मैं क्या विहित तरीका है पता नहीं है, लेकिन यहाँ एक डेटाबेस डेटाबेस की सूची के खिलाफ जाँच करके मौजूद रहने पर देखने के लिए जाँच करने के लिए, और यह बनाने के लिए अगर यह मौजूद नहीं है एक तरीका है।

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

यदि आपको यह पता करने की आवश्यकता नहीं है कि डेटाबेस बनाया गया था या नहीं, तो यह एक वैकल्पिक तरीका है।

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