I checked every line of the table creation, and have found the following 
issues:

1) When using a reference to another table ('reference participant'), that 
table has to be created before the referenced table. This was not a problem 
with sqlite.
2) When using unique=True (e.g. Field('email',unique=True)) it will 
complain about "Specified key was too long, max key..."

Am I missing something or is this correct behavior?

On Sunday, October 13, 2013 4:54:30 PM UTC+3, Niphlod wrote:
>
> there is no path2 field in the models you posted. are you sure that this 
> is the correct traceback ?
> BTW, try to issue the create statement to the db to see what is the error, 
> eventually trimming out the column that are references to external tables.
>
> On Sunday, October 13, 2013 3:00:57 PM UTC+2, Ykä Marjanen wrote:
>>
>> And the resulting ticket:
>>
>> Error ticket for "innopinion_01" Ticket ID 
>>
>> 91.155.41.52.2013-10-13.12-54-52.7a8f0165-58f8-4ca8-960a-7fdcdc40d788
>> <class '_mysql_exceptions.OperationalError'> (1005, "Can't create table 
>> 'ykamarjanen$dbname.campaign' (errno: 150)") Version  web2py™ Version 
>> 2.6.4-stable+timestamp.2013.09.22.01.43.37  Traceback 
>>
>> 1.
>> 2.
>> 3.
>> 4.
>> 5.
>> 6.
>> 7.
>> 8.
>> 9.
>> 10.
>> 11.
>> 12.
>> 13.
>> 14.
>> 15.
>> 16.
>> 17.
>> 18.
>> 19.
>> 20.
>> 21.
>> 22.
>> 23.
>>
>> Traceback (most recent call last):
>>   File "/home/ykamarjanen/web2py/gluon/restricted.py", line 217, in 
>> restricted
>>     exec ccode in environment
>>   File "/home/ykamarjanen/web2py/applications/innopinion_01/models/db.py" 
>> <https://ykamarjanen.pythonanywhere.com/admin/edit/innopinion_01/models/db.py>,
>>  line 114, in <module>
>>     Field('path2','text', filter_in=(lambda x: pickle.dumps(x)), 
>> filter_out=(lambda s: s and pickle.loads(s)),default=None, readable=False, 
>> writable=False))
>>   File "/home/ykamarjanen/web2py/gluon/dal.py", line 7895, in define_table
>>     table = self.lazy_define_table(tablename,*fields,**args)
>>   File "/home/ykamarjanen/web2py/gluon/dal.py", line 7932, in 
>> lazy_define_table
>>     polymodel=polymodel)
>>   File "/home/ykamarjanen/web2py/gluon/dal.py", line 1002, in create_table
>>     self.create_sequence_and_triggers(query,table)
>>   File "/home/ykamarjanen/web2py/gluon/dal.py", line 1816, in 
>> create_sequence_and_triggers
>>     self.execute(query)
>>   File "/home/ykamarjanen/web2py/gluon/dal.py", line 1833, in execute
>>     return self.log_execute(*a, **b)
>>   File "/home/ykamarjanen/web2py/gluon/dal.py", line 1827, in log_execute
>>     ret = self.cursor.execute(command, *a[1:], **b)
>>   File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 
>> 201, in execute
>>     self.errorhandler(self, exc, value)
>>   File "/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py", line 
>> 36, in defaulterrorhandler
>>     raise errorclass, errorvalue
>> OperationalError: (1005, "Can't create table 'ykamarjanen$dbname.campaign' 
>> (errno: 150)")
>>
>>
>>
>> On Sunday, October 13, 2013 3:59:08 PM UTC+3, Ykä Marjanen wrote:
>>>
>>> Niphlod,
>>>
>>> this is the log. The test table, that I created, passes fine, but the 
>>> "campaign" table doesn't say "success". Is it about the FOREIGN KEY?
>>>
>>> <<<<< sql.log
>>> timestamp: 2013-10-13T12:23:25.789598
>>> CREATE TABLE tests(
>>>     id INTEGER PRIMARY KEY AUTOINCREMENT,
>>>     auth_table INTEGER REFERENCES auth_user (id) ON DELETE CASCADE,
>>>     path2 TEXT
>>> );
>>> success!
>>> timestamp: 2013-10-13T12:29:03.020292
>>> CREATE TABLE campaign(
>>>     id INT AUTO_INCREMENT NOT NULL,
>>>     uuid VARCHAR(64),
>>>     name VARCHAR(512),
>>>     pagename VARCHAR(512),
>>>     description LONGTEXT,
>>>     created_by_auth INT, INDEX created_by_auth__idx (created_by_auth), 
>>> FOREIGN KEY (created_by_auth) REFERENCES auth_user (id) ON DELETE CASCADE,
>>>     created_by_participant INT, INDEX created_by_participant__idx 
>>> (created_by_participant), FOREIGN KEY (created_by_participant) REFERENCES 
>>> participant (id) ON DELETE CASCADE,
>>>     cctype VARCHAR(512),
>>>     privacy VARCHAR(512),
>>>     registration VARCHAR(512),
>>>     idea_submit VARCHAR(512),
>>>     campaign_logo VARCHAR(512),
>>>     campaign_start DATE,
>>>     campaign_end DATE,
>>>     creation_date DATETIME,
>>>     twitter_feed CHAR(1),
>>>     weekly_newsletter VARCHAR(512),
>>>     weekly_contributor_status CHAR(1),
>>>     weekly_contributor_nro INT,
>>>     weekly_contributor_prize_description LONGTEXT,
>>>     overall_contributor_status CHAR(1),
>>>     overall_contributor_nro INT,
>>>     overall_contributor_prize_description LONGTEXT,
>>>     registered_participant_status CHAR(1),
>>>     registered_participant_tasks INT,
>>>     registered_participant_description LONGTEXT,
>>>     free_prize_description LONGTEXT,
>>>     status VARCHAR(512),
>>>     nro_of_participants INT,
>>>     nro_of_ideas INT,
>>>     nro_of_ratings INT,
>>>     nro_of_comments INT,
>>>     additional_settings LONGTEXT,
>>>     credits_settings LONGTEXT,
>>>     rating_settings LONGTEXT,
>>>     process_settings LONGTEXT,
>>>     cpath LONGTEXT,
>>>     PRIMARY KEY(id)
>>> ) ENGINE=InnoDB CHARACTER SET utf8;
>>>
>>> Ykä
>>>
>>> On Sunday, October 13, 2013 3:47:36 PM UTC+3, Niphlod wrote:
>>>>
>>>> inspect databases/sql.log, there are the statements used to create the 
>>>> table there
>>>>
>>>> On Sunday, October 13, 2013 2:42:03 PM UTC+2, Ykä Marjanen wrote:
>>>>>
>>>>> Hi guys,
>>>>>
>>>>> I thought of using pythonanywhere for the next level of development, 
>>>>> so deployed my code there. I had been using sqlite as a test environment, 
>>>>> and wanted to move to the mysql database that pythonanywhere provides.
>>>>>
>>>>> I created a new mysql database and then switched the DAL connection to:
>>>>> db = 
>>>>> DAL('mysql://ykamarjanen:PASS@mysql.server/ykamarjanen$DBNAME',pool_size=1,check_reserved=['all'])
>>>>>
>>>>> After running the web2py I got an error about the database (1005, 
>>>>> can't create table, errno:150). I tried different variations, but could 
>>>>> figure out what is wrong with my table. 
>>>>>
>>>>> Here's my table, that is not created (it has some reserved names, 
>>>>> which I changed):
>>>>>
>>>>> db.define_table('campaign',
>>>>>     Field('uuid', length=64, default=lambda:str(uuid4())),
>>>>>     Field('name'),
>>>>>     Field('pagename'),
>>>>>     Field('description','text', requires=IS_LENGTH(minsize=20, 
>>>>> maxsize=500)),
>>>>>     Field('created_by_auth','reference auth_user', 
>>>>> default=auth.user_id, readable=False, writable=False),
>>>>>     Field('created_by_participant','reference participant', 
>>>>> readable=False, writable=False),
>>>>>     Field('campaign_type', readable=False, writable=False),
>>>>>     
>>>>> Field('privacy',requires=IS_IN_SET(['open','closed'],zero=T('Choose 
>>>>> privacy')),default='open'),
>>>>>     
>>>>> Field('registration',requires=IS_IN_SET(['open','invitation'],zero=T('Choose
>>>>>  
>>>>> registration')),default='open'),
>>>>>     
>>>>> Field('idea_submit',requires=IS_IN_SET(['anonymous','registered'],zero=T('Choose
>>>>>  
>>>>> how ideas can be sent')),default='anonymous'),
>>>>>     Field('campaign_logo',requires=IS_EMPTY_OR(IS_URL())),
>>>>>     
>>>>> Field('campaign_start','date',requires=IS_DATE(),default=request.now),
>>>>>     Field('campaign_end','date',requires=IS_DATE()),
>>>>>     Field('creation_date','datetime',default=request.now),
>>>>>     Field('twitter_feed','boolean',default=False),
>>>>>     
>>>>> Field('weekly_newsletter',requires=IS_IN_SET(['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'],zero=T('Pick
>>>>>  
>>>>> a day for newsletter')),default='Monday'),
>>>>>     Field('weekly_contributor_status','boolean',default=True),
>>>>>     
>>>>> Field('weekly_contributor_nro','integer',requires=IS_IN_SET(range(0,20),zero=T('Select
>>>>>  
>>>>> the number of participants included in the raffle'))),
>>>>>     Field('weekly_contributor_prize_description','text'),
>>>>>     Field('overall_contributor_status','boolean',default=True),
>>>>>     
>>>>> Field('overall_contributor_nro','integer',requires=IS_IN_SET(range(0,20),zero=T('Select
>>>>>  
>>>>> the number of participants included in the raffle'))),
>>>>>     Field('overall_contributor_prize_description','text'),
>>>>>     Field('registered_participant_status','boolean',default=True),
>>>>>     
>>>>> Field('registered_participant_tasks','integer',requires=IS_IN_SET(range(0,20),zero=T('Select
>>>>>  
>>>>> the number of minimum tasks for the prize raffle'))),
>>>>>     Field('registered_participant_description','text'),
>>>>>     Field('free_prize_description','text'),
>>>>>     Field('status', 
>>>>> requires=IS_IN_SET(['waiting','running','halted','ended']), 
>>>>> readable=False, 
>>>>> writable=False), #waiting, running, halted, ended
>>>>>     Field('nro_of_participants','integer',default=0, readable=False, 
>>>>> writable=False),
>>>>>     Field('nro_of_ideas','integer',default=0, readable=False, 
>>>>> writable=False),
>>>>>     Field('nro_of_ratings','integer',default=0, readable=False, 
>>>>> writable=False),
>>>>>     Field('nro_of_comments','integer',default=0, readable=False, 
>>>>> writable=False),
>>>>>     Field('additional_settings','text', filter_in=(lambda x: 
>>>>> pickle.dumps(x)), filter_out=(lambda s: s and 
>>>>> pickle.loads(s)),default=None, readable=False, writable=False),
>>>>>     Field('credits_settings','text', filter_in=(lambda x: 
>>>>> pickle.dumps(x)), filter_out=(lambda s: s and 
>>>>> pickle.loads(s)),default=None, readable=False, writable=False),
>>>>>     Field('rating_settings','text', filter_in=(lambda x: 
>>>>> pickle.dumps(x)), filter_out=(lambda s: s and 
>>>>> pickle.loads(s)),default=None, readable=False, writable=False),
>>>>>     Field('process_settings','text', filter_in=(lambda x: 
>>>>> pickle.dumps(x)), filter_out=(lambda s: s and 
>>>>> pickle.loads(s)),default=None, readable=False, writable=False),
>>>>>     Field('path','text', filter_in=(lambda x: pickle.dumps(x)), 
>>>>> filter_out=(lambda s: s and pickle.loads(s)),default=None, 
>>>>> readable=False, 
>>>>> writable=False))
>>>>>
>>>>> Ykä
>>>>>
>>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to