@Aurelijus- If you're dealing with foreign key errors you may have to clean the constraints up manually in MySQL- It's actually pretty easy to corrupt the foreign key constraints with web2py's db definitions, and cleanup is a bitch if you don't know exactly what to do. See my post on this, and follow the link within: https://groups.google.com/d/msg/web2py/ztQLASakiYg/UtT8Yi3zH1sJ
On Wednesday, August 8, 2012 8:22:18 AM UTC-4, Aurelijus Useckas wrote: > > Thanx Yarin, I've fixed this one. There are no more reserved words in the > table or field definitions. Nevertheless it returns an error 1005 / 150, > which refer to: "table creation failed because a foreign key constraint > was not correctly formed". > If I get rid of any refering fields it works fine. Somehow the mysql > doesn't recognise/understand the refering definitions. > > On Wed, Aug 8, 2012 at 4:08 AM, Yarin <[email protected] <javascript:>>wrote: > >> Massimo- steps to reproduce (using rocket/mysql/OSX): >> >> 1) In db.py pointing to MySQL: >> >> db.define_table('bad', >> Field('field_a', 'string'), >> Field('long', 'string') >> ) >> >> 2) Make a request. >> >> The app will error out and SQL syntax error will be ticketed. >> >> 3) Make another request. >> >> App requests now hang. Other apps are semi-hung (it's strange- i could >> open example app, but not others). App admin still works (?). The web2py >> process cannot be terminated and must be killed. >> >> (I brush up against this whenever I do something MySQL doesn't like- >> altering two tables at once in db.py, etc...) >> >> On Tuesday, August 7, 2012 5:42:30 PM UTC-4, Massimo Di Pierro wrote: >> >>> can you reproduce. If this is a web2py problem, it needs to be fixed. >>> >>> On Tuesday, 7 August 2012 10:41:27 UTC-5, Yarin wrote: >>> >>>> Think it actually does return a non-specific SQL syntax error that gets >>>> ticketed by web2py- but web2py never goes to an error screen and the >>>> browser just hangs- if i recall.. >>>> >>>> On Tuesday, August 7, 2012 11:30:37 AM UTC-4, Massimo Di Pierro wrote: >>>> >>>>> Damn MySQL. It should not hang, it should return a operationalerror. >>>>> >>>>> >>>>> >>>>> On Tuesday, 7 August 2012 10:03:44 UTC-5, Yarin wrote: >>>>> >>>>>> Change the name of in your Field('long') field in maps table - it's >>>>>> a reserved keyword in MySQL and will cause it to hang. >>>>>> >>>>>> On Tuesday, August 7, 2012 10:57:07 AM UTC-4, Aurelijus Useckas wrote: >>>>>> >>>>>>> Here it is: >>>>>>> >>>>>>> db.define_table('tag', >>>>>>> Field('tag', notnull=True, unique=True), >>>>>>> format='%(tag)s') >>>>>>> >>>>>>> db.define_table('city', >>>>>>> Field('name', notnull=True, unique=True), >>>>>>> format='%(name)s') >>>>>>> >>>>>>> db.define_table('maps', >>>>>>> Field('name'), >>>>>>> Field('last_name'), >>>>>>> Field('long'), >>>>>>> Field('lat')) >>>>>>> >>>>>>> >>>>>>> db.define_table('asoc', >>>>>>> Field('name', label='Pavadinimas', unique=True), >>>>>>> Field('City', 'list:reference city', label='Miestas'), >>>>>>> Field('address', label='Adresas'), >>>>>>> Field('www'), >>>>>>> Field('tel'), >>>>>>> Field('fax'), >>>>>>> Field('email'), >>>>>>> Field('President', label='Asociacijos prezidentas'), >>>>>>> Field('CEO', label='Asociacijos generalinis'), >>>>>>> Field('CEO_tel', label='Generalinio tel.'), >>>>>>> Field('CEO_email', label='Generalinio email'), >>>>>>> Field('CEO_mob', label='Generalinio mobilus'), >>>>>>> Field('Pres_tel', label='Prezidento tel.'), >>>>>>> Field('Pres_email', label='Prezidento email'), >>>>>>> Field('Pres_mob', label='Prezidento mobilus'), >>>>>>> Field('submited_at', 'datetime', default=request.now, >>>>>>> writable=False, readable=False), >>>>>>> Field('updated_at', 'datetime', default=request.now, >>>>>>> update=request.now, writable=False, readable=False), >>>>>>> Field('submited_by', db.auth_user, default=auth.user_id, >>>>>>> writable=False, readable=False), >>>>>>> Field('updated_by', db.auth_user, update=auth.user_id, >>>>>>> writable=False, readable=False), >>>>>>> format='%(name)s') >>>>>>> >>>>>>> db.asoc.email.requires=IS_**EMPTY_OR(IS_EMAIL()) >>>>>>> db.asoc.CEO_email.requires=IS_**EMPTY_OR(IS_EMAIL()) >>>>>>> db.asoc.Pres_email.requires=**IS_EMPTY_OR(IS_EMAIL()) >>>>>>> db.asoc.name.requires=IS_NOT_**EMPTY() >>>>>>> >>>>>>> db.define_table('countries', >>>>>>> Field('Country', notnull=True, unique=True), >>>>>>> Field('latitude', readable=True, writable=False), >>>>>>> Field('longitude', readable=True, writable=False), >>>>>>> format = '%(Country)s' >>>>>>> ) >>>>>>> >>>>>>> def horizontal_checkboxes(f,v): >>>>>>> horizontal_widget = SQLFORM.widgets.checkboxes.** >>>>>>> widget(f,v,cols=4) >>>>>>> return locals() >>>>>>> >>>>>>> db.define_table('company', >>>>>>> Field('title', label='Pavadinimas', unique=True), >>>>>>> Field('CEO', label='Generalinis dir.'), >>>>>>> Field('code', 'integer', label='Įmonės kodas',unique=True, >>>>>>> default=None), >>>>>>> Field('revenue', 'integer', label='Metinė apyvarta (mln.)'), >>>>>>> Field('workers', 'integer', label='Darbuotojų skaičius'), >>>>>>> # Field('logo', 'upload', label='Įmonės logo'), >>>>>>> Field('produce_tag', 'list:reference tag', label='Produkcija', >>>>>>> default=None), >>>>>>> Field('produce', label='Produkcija (smulkiau)'), >>>>>>> Field('Email', default=None, notnull=False), >>>>>>> Field('Tel'), >>>>>>> Field('Fax'), >>>>>>> Field('www'), >>>>>>> Field('City', 'list:reference city', label='Miestas'), >>>>>>> Field('address', label='Adresas'), >>>>>>> Field('extra_contacts', 'boolean', label='Pridėti kontakt. >>>>>>> duomenų'), >>>>>>> Field('extra_contacts_2', 'boolean', label='Pridėti kontakt. >>>>>>> duomenų'), >>>>>>> Field('name_1', label='Vardas'), >>>>>>> Field('pareigos_1', label='Pareigos'), >>>>>>> Field('tel_1', label='Papildomas tel.'), >>>>>>> Field('email_1', label='Papildomas el. paštas'), >>>>>>> Field('name_2', label='Vardas'), >>>>>>> Field('pareigos_2', label='Pareigos'), >>>>>>> Field('tel_2', label='Papildomas tel.'), >>>>>>> Field('email_2', label='Papildomas el. paštas'), >>>>>>> Field('Association', db.asoc, label='Priklauso asociacijai'), >>>>>>> Field('other', 'text', label='Papildoma info'), >>>>>>> Field('submited_at', 'datetime', default=request.now, >>>>>>> writable=False, readable=False), >>>>>>> Field('submited_by', db.auth_user, default=auth.user_id, >>>>>>> writable=False, readable=False), >>>>>>> Field('updated_at', 'datetime', update=request.now, >>>>>>> writable=False, readable=False), >>>>>>> Field('updated_by', db.auth_user, update=auth.user_id, >>>>>>> writable=False, readable=False), >>>>>>> Field('exports_wants_to', 'list:reference countries', >>>>>>> label='Domina šalys'), >>>>>>> Field('exports_to', 'list:reference countries', >>>>>>> label='Eksportuoja į', required=False), >>>>>>> Field('imports_from', 'list:reference countries', >>>>>>> label='Importuoja iš', required=False), >>>>>>> format = '%(title)s') >>>>>>> >>>>>>> from plugin_multiselect_widget import ( >>>>>>> hmultiselect_widget, vmultiselect_widget, >>>>>>> rhmultiselect_widget, rvmultiselect_widget, >>>>>>> ) >>>>>>> >>>>>>> db.company.exports_to.widget = hmultiselect_widget >>>>>>> db.company.imports_from.widget = hmultiselect_widget >>>>>>> db.company.exports_wants_to.**widget = hmultiselect_widget >>>>>>> >>>>>>> db.company.produce_tag.widget = lambda field,value: \ >>>>>>> SQLFORM.widgets.checkboxes.**widget(field,value,cols=6) >>>>>>> >>>>>>> db.company.Email.requires=IS_**EMPTY_OR(IS_EMAIL(error_**message='El. >>>>>>> paštas!')) >>>>>>> db.company.email_1.requires=**IS_EMPTY_OR(IS_EMAIL()) >>>>>>> db.company.email_2.requires=**IS_EMPTY_OR(IS_EMAIL()) >>>>>>> db.company.code.requires=IS_**EMPTY_OR(IS_NOT_IN_DB(db, >>>>>>> db.company.code)) >>>>>>> db.company.exports_to.**requires=IS_EMPTY_OR(IS_IN_DB(**db, >>>>>>> db.countries.Country)) >>>>>>> db.company.exports_to.**requires=IS_IN_DB(db,'countrie**s.id<http://countries.id> >>>>>>> ',db.countries._format,**multiple=True) >>>>>>> db.company.exports_wants_to.**requires=IS_IN_DB(db,'countrie**s.id<http://countries.id> >>>>>>> ',db.countries._format,**multiple=True) >>>>>>> db.company.produce_tag.**requires=IS_IN_DB(db,'tag.id',** >>>>>>> db.tag._format,multiple=True) >>>>>>> >>>>>>> db.company.Association.**requires=IS_IN_DB(db,'asoc.id'**,db.asoc._format, >>>>>>> >>>>>>> zero='-----Pasirinkti-----') >>>>>>> >>>>>>> db.define_table('comment', >>>>>>> Field('body','text',label='**Your comment'), >>>>>>> Field('company', db.company, 'list: reference company', >>>>>>> readable=False, writable=False), >>>>>>> Field('posted_on','datetime',**default=request.now), >>>>>>> Field('posted_by', db.auth_user, 'list: reference auth_user', >>>>>>> default=auth.user_id)) >>>>>>> >>>>>>> db.comment.posted_on.writable=**db.comment.posted_on.readable=** >>>>>>> False >>>>>>> db.comment.posted_by.writable=**db.comment.posted_by.readable=** >>>>>>> False >>>>>>> db.comment.company.default = request.args(0) >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Tuesday, August 7, 2012 5:36:49 PM UTC+3, Massimo Di Pierro wrote: >>>>>>> >>>>>>>> Can you please post the entire mode? My guess is an issue with >>>>>>>> capitalization perhaps combined with corruption of table files. >>>>>>>> >>>>>>>> On Tuesday, 7 August 2012 06:00:06 UTC-5, Aurelijus Useckas wrote: >>>>>>>> >>>>>>>>> I've tried nearly any possible syntax, but with no success. Any >>>>>>>>> line with the reference to other table causes an error 1005 / 150: >>>>>>>>> "table creation failed because a foreign key constraint was not >>>>>>>>> correctly formed" >>>>>>>>> Wasted a lot of time on it with no avail, guess will be forced to >>>>>>>>> go back to ol' SQLite :) >>>>>>>>> >>>>>>>>> On Wednesday, August 1, 2012 8:03:05 PM UTC+3, Massimo Di Pierro >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Try >>>>>>>>>> >>>>>>>>>> Field('City', 'list:reference City', label='Miestas'), >>>>>>>>>> >>>>>>>>>> On Wednesday, 1 August 2012 11:05:02 UTC-5, Aurelijus Useckas >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> tried it, still the same error :( thnx anyway >>>>>>>>>>> >>>>>>>>>>> On Wednesday, August 1, 2012 6:31:52 PM UTC+3, Massimo Di Pierro >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Yes. this is wrong: >>>>>>>>>>>> >>>>>>>>>>>> Field('City', db.city, 'list:reference city', label='Miestas'), >>>>>>>>>>>> >>>>>>>>>>>> should be >>>>>>>>>>>> >>>>>>>>>>>> Field('City', 'list:reference city', label='Miestas'), >>>>>>>>>>>> >>>>>>>>>>>> On Wednesday, 1 August 2012 09:15:07 UTC-5, Aurelijus Useckas >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Thank you Massimo, but the 1005/150 mysql problem seems to be >>>>>>>>>>>>> smth wring with foreign key (merging of tables). Are there any >>>>>>>>>>>>> flaws in my >>>>>>>>>>>>> DAL syntax? >>>>>>>>>>>>> >>>>>>>>>>>>> This line seems to be the trigger: >>>>>>>>>>>>> Field('City', db.city, 'list:reference city', label='Miestas'), >>>>>>>>>>>>> >>>>>>>>>>>>> it references: >>>>>>>>>>>>> >>>>>>>>>>>>> db.define_table('city', >>>>>>>>>>>>> Field('name', notnull=True, unique=True), >>>>>>>>>>>>> format='%(name)s') >>>>>>>>>>>>> >>>>>>>>>>>>> any ideas what's bothering mysql? >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Wednesday, August 1, 2012 4:56:03 PM UTC+3, Massimo Di >>>>>>>>>>>>> Pierro wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> db = DAL('mysql://....', check_**reserved=['common','mysql']) >>>>>>>>>>>>>> >>>>>>>>>>>>>> Anyway, I am not sure your problem is that you are using a >>>>>>>>>>>>>> reserved keyword. Perhaps the table exists already. I am also >>>>>>>>>>>>>> surprised you >>>>>>>>>>>>>> are getting a pymysql InternalError and not an OperationalError. >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Wednesday, 1 August 2012 07:45:01 UTC-5, Aurelijus Useckas >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> I've changed the long into longitude and it seems to be >>>>>>>>>>>>>>> solved but I still get errors: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> p2 >>>>>>>>>>>>>>> S'<class \'gluon.contrib.pymysql.err.**InternalError\'> >>>>>>>>>>>>>>> (1005, u"Can\'t create table \'./lpkdb/asoc.frm\' (errno: >>>>>>>>>>>>>>> 150)")' >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Now it says it cannot create next table, which is: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> db.define_table('asoc', >>>>>>>>>>>>>>> Field('name', label='Pavadinimas', unique=True), >>>>>>>>>>>>>>> Field('City', db.city, 'list:reference city', >>>>>>>>>>>>>>> label='Miestas'), >>>>>>>>>>>>>>> Field('address', label='Adresas'), >>>>>>>>>>>>>>> Field('www'), >>>>>>>>>>>>>>> Field('tel'), >>>>>>>>>>>>>>> Field('fax'), >>>>>>>>>>>>>>> Field('email'), >>>>>>>>>>>>>>> Field('President', label='Asociacijos prezidentas'), >>>>>>>>>>>>>>> Field('CEO', label='Asociacijos generalinis'), >>>>>>>>>>>>>>> Field('CEO_tel', label='Generalinio tel.'), >>>>>>>>>>>>>>> Field('CEO_email', label='Generalinio email'), >>>>>>>>>>>>>>> Field('CEO_mob', label='Generalinio mobilus'), >>>>>>>>>>>>>>> Field('Pres_tel', label='Prezidento tel.'), >>>>>>>>>>>>>>> Field('Pres_email', label='Prezidento email'), >>>>>>>>>>>>>>> Field('Pres_mob', label='Prezidento mobilus'), >>>>>>>>>>>>>>> Field('submited_at', 'datetime', default=request.now, >>>>>>>>>>>>>>> writable=False, readable=False), >>>>>>>>>>>>>>> Field('updated_at', 'datetime', default=request.now, >>>>>>>>>>>>>>> update=request.now, writable=False, readable=False), >>>>>>>>>>>>>>> Field('submited_by', db.auth_user, default=auth.user_id, >>>>>>>>>>>>>>> writable=False, readable=False), >>>>>>>>>>>>>>> Field('updated_by', db.auth_user, update=auth.user_id, >>>>>>>>>>>>>>> writable=False, readable=False), >>>>>>>>>>>>>>> format='%(name)s') >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Are there some guidlines on how to construct DAL field names >>>>>>>>>>>>>>> in order to avoid any conflict while migrating to mysql? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Wednesday, August 1, 2012 3:36:51 PM UTC+3, tomasz >>>>>>>>>>>>>>> bandura wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Is it 'long' a mysql's reserved word? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Regards >>>>>>>>>>>>>>>> Tomasz >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 2012/8/1 Aurelijus Useckas <[email protected]> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> this is the trigger i guess: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> db.define_table('maps', >>>>>>>>>>>>>>>>> Field('name'), >>>>>>>>>>>>>>>>> Field('last_name'), >>>>>>>>>>>>>>>>> Field('long'), >>>>>>>>>>>>>>>>> Field('lat'), >>>>>>>>>>>>>>>>> format='%(name)s') >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Wednesday, August 1, 2012 3:30:40 PM UTC+3, Aurelijus >>>>>>>>>>>>>>>>> Useckas wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I've built the app on SQLite and now want to migrate to >>>>>>>>>>>>>>>>>> the server based mysql. BUT web2py hangs in the middle of >>>>>>>>>>>>>>>>>> creating, >>>>>>>>>>>>>>>>>> basicaly just after the auth tables. When I restart the >>>>>>>>>>>>>>>>>> apache I can see >>>>>>>>>>>>>>>>>> auth tables as well as a few from my app. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> this is the err ticket that I get: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> (dp1 >>>>>>>>>>>>>>>>>> S'output' >>>>>>>>>>>>>>>>>> p2 >>>>>>>>>>>>>>>>>> S'<class \'gluon.contrib.pymysql.err.**Pr**ogrammingError\'> >>>>>>>>>>>>>>>>>> (1064, u"You have an error in your SQL syntax; check the >>>>>>>>>>>>>>>>>> manual that >>>>>>>>>>>>>>>>>> corresponds to your MySQL server version for the right >>>>>>>>>>>>>>>>>> syntax to use near >>>>>>>>>>>>>>>>>> \'long VARCHAR(255),\\n lat VARCHAR(255),\\n PRIMARY >>>>>>>>>>>>>>>>>> KEY(id)\\n) >>>>>>>>>>>>>>>>>> ENGINE=InnoDB CHA\' at line 5")' >>>>>>>>>>>>>>>>>> p3 >>>>>>>>>>>>>>>>>> sS'layer' >>>>>>>>>>>>>>>>>> p4 >>>>>>>>>>>>>>>>>> S'/opt/web-apps/web2py/**applica**tions/init/models/db_** >>>>>>>>>>>>>>>>>> comp.py' >>>>>>>>>>>>>>>>>> p5 >>>>>>>>>>>>>>>>>> sS'code' >>>>>>>>>>>>>>>>>> p6 >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> thnx >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >> >> >> >> > > --

