Hi!

On Fri, Mar 25, 2016 at 03:06:00PM +0000, Jordan Thompson <jor...@thompco.com> 
wrote:
> Hi there,
> I have the following tables:
> 
> class VmThread(sqlobject.SQLObject):
>    name            = sqlobject.StringCol(length=999, varchar=True,
> unique=True, notNull=True)
>    state           = sqlobject.StringCol(length=999, varchar=True,
> unique=True, notNull=True)
>    vm_id           = sqlobject.IntCol(notNull=True)
>    sessions         = sqlobject.RelatedJoin('Session')
> 
> 
> class Session(sqlobject.SQLObject):
>    num_vms             = sqlobject.IntCol(notNull=True)
>    start_time       = sqlobject.DateTimeCol(notNull=True)
>    end_time         = sqlobject.DateTimeCol(default=None)
>    vm_threads           = sqlobject.RelatedJoin('VmThread')
> 
> 
> I am running this on a MySql database and I expected an intermediate
> table with foreign keys but they are not created.  When the
> createTable method is called on the two objects I get the following
> three tables (as I expected):
> 
> mysql> desc vm_thread;
> +-------+--------------+------+-----+---------+----------------+
> | Field | Type | Null | Key | Default | Extra |
> +-------+--------------+------+-----+---------+----------------+
> | id | int(11) | NO | PRI | NULL | auto_increment |
> | name | varchar(999) | NO | UNI | NULL | |
> | state | varchar(999) | NO | UNI | NULL | |
> | vm_id | int(11) | NO | | NULL | |
> +-------+--------------+------+-----+---------+----------------+
> 
> mysql> desc session;
> +-------------------+-------------+------+-----+---------+----------------+
> | Field             | Type        | Null | Key | Default | Extra          |
> +-------------------+-------------+------+-----+---------+----------------+
> | id                | int(11)     | NO   | PRI | NULL    | auto_increment |
> | num_vms           | int(11)     | NO   |     | NULL    |                |
> | start_time        | datetime(6) | NO   |     | NULL    |                |
> | end_time          | datetime(6) | YES  |     | NULL    |                |
> +-------------------+-------------+------+-----+---------+----------------+
> 
> mysql> desc session_vm_thread;
> +--------------+---------+------+-----+---------+-------+
> | Field        | Type    | Null | Key | Default | Extra |
> +--------------+---------+------+-----+---------+-------+
> | session_id   | int(11) | NO   |     | NULL    |       |
> | vm_thread_id | int(11) | NO   |     | NULL    |       |
> +--------------+---------+------+-----+---------+-------+
> 
> 
> However, I was expecting a foreign key into the intermediate table but
> it was not created:
> 
> mysql> select table_name, column_name, constraint_name,
> referenced_table_name, referenced_column_name
>     -> from information_schema.key_column_usage
>     -> where referenced_table_name = "vm_thread";
> Empty set (0.08 sec)
> 
> mysql> select table_name, column_name, constraint_name,
> referenced_table_name, referenced_column_name
>     -> from information_schema.key_column_usage
>     -> where referenced_table_name = "session_vm_thread";
> Empty set (0.08 sec)
> 
> What am I missing?

   By default intermediate tables are created in dbconnection.py as

    def _SO_createJoinTableSQL(self, join):
        return ('CREATE TABLE %s (\n%s %s,\n%s %s\n)' %
                (join.intermediateTable,
                 join.joinColumn,
                 self.joinSQLType(join),
                 join.otherColumn,
                 self.joinSQLType(join)))

   So, no foreign keys. Perhaps because not all databases support
foreign keys. MySQL, AFAIK, requires InnoDB to support them.

   You can create the intermediate table yourself, see

http://sqlobject.org/FAQ.html#how-can-i-define-my-own-intermediate-table-in-my-many-to-many-relationship

Oleg.
-- 
     Oleg Broytman            http://phdru.name/            p...@phdru.name
           Programmers don't die, they just GOSUB without RETURN.

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to