2011-11-23 9 views
5

Este es mi archivo hasta el momento:Después de crear mis tablas con SQLAlchemy, ¿cómo puedo agregar columnas adicionales?

from sqlalchemy import create_engine, ForeignKey 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship, backref 
from sqlalchemy import Column, Integer, String 
from sqlalchemy import Table, Text 

engine = create_engine('mysql://root:[email protected]/alctest', 
      echo=False) 

Base = declarative_base() 

class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key = True) 
    name = Column(String(100)) 
    fullname = Column(String(100)) 
    password = Column(String(100)) 
    addresses = relationship("Address", order_by="Address.id", backref="user") 

    def __init__(self, name, fullname, password): 
     self.name = name 
     self.fullname = fullname 
     self.password = password 

    def __repr__(self): 
     return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password) 


class Address(Base): 
    __tablename__ = 'addresses' 
    id = Column(Integer, primary_key = True) 
    email_address = Column(String(100), nullable=False) 

    #foreign key, must define relationship 
    user_id = Column(Integer, ForeignKey('users.id')) 
    user = relationship("User", backref = backref('addresses',order_by=id)) 

Base.metadata.create_all(engine) 

Este archivo es muy sencillo. Crea una tabla de Usuario y Dirección. Después de ejecutar este archivo, se crean las tablas.

Pero ahora quiero agregar una columna a "Usuario". ¿Cómo puedo hacer eso? ¿Que tengo que hacer?

+1

¿Desea agregar una columna sin cambiar el código existente? – Nilesh

+0

@lafada No lo sé. Solo quiero agregarle columnas. – user1061003

+2

Entonces la mejor manera es sqlalchemy-migrate :). – Nilesh

Respuesta

3

Puede agregar la columna con el método Table.append_column.

test = Column('test', Integer) 
User.__table__.append(test) 

Pero esto no va a disparar el comando ALTER TABLE añadir que la columna en la base de datos. Según el documento dado para append_column, ese comando debe ejecutarse manualmente después de agregar esa columna en el modelo.

1

Respuesta corta: No puede: AFAIK, actualmente no hay forma de hacerlo directamente desde sqlalchemy.

Sin embargo, puede usar sqlalchemy-migrate para esto si cambia su modelo con frecuencia y tiene versiones diferentes lanzadas a producción. De lo contrario, podría ser una exageración y será mejor que genere las secuencias de comandos ALTER TABLE ... manualmente.

Cuestiones relacionadas