I think the problem with archiving is when I defined archive table in mssql I defined a field named 'current_record" type int. Maybe type int is not correct, isn't it? Thank you
Il giorno venerdì 21 agosto 2020 09:43:14 UTC+2, Andrea Fae' ha scritto: > > Hello, some updates. > In the databases I can see only this (see attachment). > I'm trying to manage record versionin (table archiving). I create for > example asset.archive in mssql but web2py doesn't "see" the table. In fact > the table is not listend in the appadmin page. > The question is that tables definitions are not created in the databases > folder, even if I put migrate=false in appconfig.ini and in db.py I typed > migrate_fake=true... ??? > > > > Il giorno giovedì 20 agosto 2020 16:57:26 UTC+2, Andrea Fae' ha scritto: >> >> UPDATES.... >> >> in appconfig.ini I changed from migrate= true to migrate=false. >> >> tha system doesn't create me the sql.log and .table file definitions in >> the folder databases, but the application seems start to work! How is >> posisble? >> >> >> Il giorno giovedì 20 agosto 2020 16:45:35 UTC+2, Andrea Fae' ha scritto: >>> >>> Hello Villas, first al all...thank you thank you thank you! But I >>> didn't arrived to the end of the game yet. but I think I'm near with your >>> suggestions. >>> >>> I followed the "easier solution" and, with a lot of effort, now I have >>> my MSSQL database filled of my data. >>> But when I start tha application web2py I have this error: >>> >>> Error ticket for "ITAsset"Ticket ID >>> >>> 127.0.0.1.2020-08-20.16-37-26.91c5b362-833d-4bdc-afef-3b727fde37a8 >>> <class 'pyodbc.ProgrammingError'> ('42S01', u"[42S01] [Microsoft][ODBC >>> SQL Server Driver][SQL Server]There is already an object named 'sede' in >>> the database. (2714) (SQLExecDirectW)")Versione >>> web2py™ Version 2.14.6-stable+timestamp.2016.05.10.00.21.47 >>> Python Python 2.7.15: C:\Python27\python.exe (prefix: C:\Python27) >>> Traceback >>> >>> 1. >>> 2. >>> 3. >>> 4. >>> 5. >>> 6. >>> 7. >>> 8. >>> 9. >>> 10. >>> 11. >>> 12. >>> 13. >>> 14. >>> 15. >>> 16. >>> 17. >>> 18. >>> 19. >>> >>> Traceback (most recent call last): >>> File "C:\web2py\gluon\restricted.py", line 227, in restricted >>> exec ccode in environment >>> File "c:/web2py/applications/ITAsset/models/db_asset.py" >>> <http://127.0.0.1:8000/admin/default/edit/ITAsset/models/db_asset.py>, line >>> 12, in <module> >>> format='%(nome)s') >>> File "C:\web2py\gluon\packages\dal\pydal\base.py", line 834, in >>> define_table >>> table = self.lazy_define_table(tablename,*fields,**args) >>> File "C:\web2py\gluon\packages\dal\pydal\base.py", line 873, in >>> lazy_define_table >>> polymodel=polymodel) >>> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 482, in >>> create_table >>> self.create_sequence_and_triggers(query, table) >>> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 1369, in >>> create_sequence_and_triggers >>> self.execute(query) >>> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 1388, in >>> execute >>> return self.log_execute(*a, **b) >>> File "C:\web2py\gluon\packages\dal\pydal\adapters\base.py", line 1382, in >>> log_execute >>> ret = self.get_cursor().execute(command, *a[1:], **b) >>> ProgrammingError: ('42S01', u"[42S01] [Microsoft][ODBC SQL Server >>> Driver][SQL Server]There is already an object named 'sede' in the database. >>> (2714) (SQLExecDirectW)") >>> >>> >>> I will attach you db.py and dbasset.py, my models and the sql.log >>> generated... >>> I tested with all combination of "migrate" and "fake_migrate" but web2py >>> try every time to create the table "sede and so the error. >>> Can you have another suggestion? when I will finish I inveted you yo a >>> dinner in the restaurant! :-) >>> >>> thank you >>> >>> >>> Il giorno mercoledì 19 agosto 2020 12:32:20 UTC+2, villas ha scritto: >>>> >>>> *An easier solution for you could be this!* >>>> Simply specify your created_by/modified_by as extra fields (which >>>> should side-step self-referencing probem). >>>> I didn't test it, but it seems like a good idea to me. You can then use >>>> normal migrations etc. >>>> >>>> auth.settings.extra_fields['auth_user']= [ >>>> >>>> Field('is_active', 'boolean', default=True), >>>> Field('created_on', 'datetime', default=request.now), >>>> Field('created_by', 'integer', default=auth.user_id), >>>> Field('modified_on', 'datetime', update=request.now), >>>> Field('modified_by', 'integer', update=auth.user_id) >>>> >>>> ] >>>> >>>> auth.define_tables(... signature=False ) >>>> >>>> *Otherwise, in answer to your questions...* >>>> migrate='asset_archive.table' >>>> Personally, I do not specify the table definition name as the one given >>>> automatically by web2py is very good. I just use migrate=True/False. >>>> If you use migrate='asset_archive.table', you are also specifying >>>> migrate=True >>>> >>>> fake_migrate=True >>>> This is used to recreate the .table file without touching your DB. >>>> If you manually create and edit the fields in your DB, you may wish to >>>> recreate the .table definition file (hence fake_migrate). >>>> >>>> I am not sure how you are using the archiving etc, but I do know >>>> this: >>>> >>>> - you can manually create your own DB on-disk structure with >>>> whatever triggers, indexes etc you require. >>>> - in web2py you can use define_table to create a web2py meta >>>> definition (which must be compatible with what is on disk!) >>>> - you can use fake_migrate if you wish to create a .table >>>> definition file (which will reflect your web2py define_table) >>>> - you can use migrate=False to prevent web2py from attempting to >>>> migrate the physical DB on-disk structure >>>> >>>> Using the above, the book explanation should make a little more sense. >>>> >>>> >>>> >>>> >>>> >>>> >>>> >>>> On Wednesday, 19 August 2020 09:43:42 UTC+1, Andrea Fae' wrote: >>>> >>>>> Hello Villas, unfortunately other problems to this game... >>>>> I used archiving, and so this type of table definitions >>>>> >>>>> db.define_table('asset_archive', >>>>> Field('current_record', db.asset), >>>>> db.asset,migrate='asset_archive.table') >>>>> >>>>> but I have the same problem regarding FOREIGN KEYS...no way to >>>>> recreate the tables. >>>>> >>>>> Do I have to give up the record archiving? Waht do you think? >>>>> >>>>> If you can, please can you explain the meaning of fake_migrate? I >>>>> never used and in the book is not very well explained. >>>>> >>>>> Thank you >>>>> >>>>> >>>>> >>>>> Il giorno martedì 18 agosto 2020 22:38:50 UTC+2, villas ha scritto: >>>>>> >>>>>> I presume therefore that you need those fields. This is the kind of >>>>>> thing I do to get things working. Please forgive me if I've missed >>>>>> something. >>>>>> >>>>>> - I would create those required fields manually in your database >>>>>> (without the constraint that causes the problem). >>>>>> - Set auth.define_tables(migrate = True, fake_migrate=True) >>>>>> - Run the app. This will create the .table definition file in >>>>>> the databases dir. You may have had to delete the old .table file. >>>>>> If >>>>>> necessary delete that. >>>>>> - Set auth.define_tables(migrate =False) again. >>>>>> >>>>>> >>>>>> Sorry if this seems strange, but it is a work around solution. >>>>>> I am hoping that someone will eventually fix this contraint problem >>>>>> in pyDal. >>>>>> >>>>>> >>>>>> On Tuesday, 18 August 2020 20:51:57 UTC+1, Andrea Fae' wrote: >>>>>>> >>>>>>> Thank you Villas. I'm using option 2 and now I have the tables >>>>>>> without "created_by" and "modified_by". >>>>>>> Now I will try to reset signature=true and see what will happen. If >>>>>>> it causes the same error I could add but they will not managed >>>>>>> automatically by web2py, or I'm wrong? >>>>>>> What do you suggest? >>>>>>> Thank you for your precious information. >>>>>>> >>>>>>> Il giorno lunedì 17 agosto 2020 14:24:25 UTC+2, villas ha scritto: >>>>>>>> >>>>>>>> Hi Andrea >>>>>>>> I was pleased to see you are making progress with the DB connection >>>>>>>> etc. >>>>>>>> I can see why mssql does not like the cascade from the same >>>>>>>> auth_user table. This may be an issue which needs fixing... >>>>>>>> To get things moving, and this might not be ideal, but I propose >>>>>>>> you consider either of these options: >>>>>>>> >>>>>>>> 1. Create manually your own tables without those contraints. >>>>>>>> You then set this: auth.define_tables(... migrate=False ) so >>>>>>>> that pyDal skips creation. >>>>>>>> 2. Do not include the signature fields with your auth. >>>>>>>> auth.define_tables(... signature=False ) >>>>>>>> >>>>>>>> Incidentally, I use option 2 and I therefore do not benefit from >>>>>>>> the created and modified info, but I could easily remedy this by >>>>>>>> adding >>>>>>>> the fields if I wished. >>>>>>>> Hope this helps. >>>>>>>> >>>>>>>> -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/3893e205-f7db-4483-97ee-1131aee9d4b5o%40googlegroups.com.