On Mon, Jan 12, 2009 at 6:15 PM, Oleg Broytmann <p...@phd.pp.ru> wrote:

> > In short, I need something like that:
> > "ALTER TABLE foo ADD FOREIGN KEY (dest_id) REFERENCES dest_type"
> >
> > Is this possible with SQLObject?
>
>   Foo.sqlmeta.addColumn(
>      ForeignKey("DestType", name='dest', default=None),
>   changeSchema=True)
>

Hi,
this is not exactly what we were trying to do, since we already
have a column that must be "made" foreign key.

A simple example:
=============================================================
from sqlobject import *

URI = 'mysql://USER:p...@localhost/DB'

class InfoType(SQLObject):
    kind = UnicodeCol(notNone=True)

class MyInfo(SQLObject):
    # For a series of reasons we don't want to specify 'kind' as ForeignKey,
    # at creation time.
    kindID = IntCol(notNone=True)
    info = UnicodeCol(notNone=True)

# Connect.
conn = connectionForURI(URI, debug=True)
InfoType.setConnection(conn)
MyInfo.setConnection(conn)

# Drop/create tables.
InfoType.dropTable(ifExists=True)
MyInfo.dropTable(ifExists=True)
InfoType.createTable(ifNotExists=True)
MyInfo.createTable(ifNotExists=True)

# The foreign key, pointing to InfoType.id.
fk = ForeignKey('InfoType', name='kind', default=None)
MyInfo.sqlmeta.addColumn(fk, changeSchema=True)
=============================================================

The above code raises an AssertionError:
  AssertionError: The class __main__.MyInfo already has a column 'kindID'
(<IntCol 895364c kindID>), you cannot add the column <ForeignKey 89b588c
kind>

What we need is a way to execute a SQL statement like (for MySQL):
  ALTER TABLE my_info ADD FOREIGN KEY (kind_id) REFERENCES info_type;

Notice that the my_info table already exists and is full of data, so
we can't drop/recreate it.

Is there any way to do this, using SQLObject?


Thanks!
-- 
Davide Alberani <davide.alber...@gmail.com>  [PGP KeyID: 0x465BFD47]
http://erlug.linux.it/~da/
------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to