I was trying to move a MySQL based app to the GAE. The MySQL was built by inserting values into the SQL table with a python script, so it made since (to me) to do the same on the GAE. I'm guessing the easiest way to avoid this would have been to download a CSV of my data and use the appadmin to upload it again, however the larger of the two tables returns 'can't parse file' when I tried that. So I was trying to upload the data with a script.
However, it seems the error I'm seeing here might actually just be related to the appadmin displaying very large tables. I tried doing a serach for just one of my uploaded entries and it's actually there I just have to put in the URL to the appadmin manually b/c the default is to display all values. I'm uploading a version of my code now that I think will work since the data appears to be there and it's just an appadmin problem with the display. As for removing the duplicates it's not a big deal but anyone have a suggestion as to how I go about that? With the 1000 entity limit on selects I'm trying to think now how to best find only duplicates. Unfortunately I didn't put any 'time' variables in the table. I'm open to suggestions. On Sep 19, 8:02 pm, Robin B <robi...@gmail.com> wrote: > On Sep 19, 6:13 pm, Chris S <sanders.ch...@gmail.com> wrote: > > > From what I've read enabling billing doesn't increase the CPU time > > just some of the other quotas. It's CPU time that gets eaten up so > > badly when you remove/add items to the datastore and I'm not keen on > > paying for extra CPU time until I at least have some sort of working > > app to expand on. > > It is true that enabling billing does not increase the total free > monthly CPU, it does however increase the max rate you can consume CPU > by 4.8X, so you won't hit your over quota so quickly in the short > term. > > http://code.google.com/appengine/docs/quotas.html#Resources > > > > > As far as the duplicate entries, I removed the "ID" field before > > uploading since I knew the datastore would assign a different ID > > number than a SQL based web2py table. Is that the reason re-uploading > > data didn't overwrite old data? I would have preferred it to have > > over written it, but with out knowing the unique identifier that > > didn't happen. I'm sure I could use the remote_api_shell to recurse > > through the database and remove duplicates it's just that I don't see > > how that could be the problem. > > Removing the IDs certainly created the duplicate entries, and if you > had references between entries, the data is probably invalid. > > > > > I've tried uploading this same data to the development (local) copy of > > the GAE datastore and the table finds the entities as expected. So > > where do I go now since that's not the same thing I'm seeing on the > > production Datastore? Do I need to delete all enteries and re-upload > > all of the data again? I sure hope not. > > I would try to remove the table entries. If you can't remove the > entries, you might instead create a brand new table with a different > name somehow. > > > > > Thanks for pointing out where I can find info on what the web2py > > fields translate to in datastore terms. That will help me insure I > > don't have an issue with that in the future. > > What were you trying to do? Backup/Restore? Schema migration? > > Robin > > > On Sep 19, 5:09 pm, Robin B <robi...@gmail.com> wrote: > > > > > Looking over two tables here are the things I've identified as > > > > possible problems: > > > > 1 - This table has a 'double' in it. Not just int/string like the > > > > working one. For GAE uploading I defined the double field as a GAE > > > > "float" property. Is it possible web2py defines a 'double' as > > > > something else on GAE? If so is there a mapping that would tell me > > > > how to map web2py fields into GAE fields for uploading data? > > > > On GAE, 'double' is a float looking at the top of gql.py. > > > > > 2 - Searching the Data Viewer on GAE shows that due to a previously > > > > failed data upload I now have multiple copies of some of the > > > > entities. These copies the exact same data in the except for the ID/ > > > > Name fields. I would like to remove the duplicates sometime but that > > > > wasn't my first concern. Would duplicate copies cause this problem? > > > > I figured since the ID is unique it would just show up as another > > > > entery in the table. I haven't set any of the entries to 'unique'. > > > > It depends on your app, but you probably want to remove any duplicates > > > before reloading the data. I read that the bulk loader will over- > > > write records using the IDs given in the .csv, which is what you want. > > > > > 3 - Both tables are set with migrate=False, specifically b/c I've > > > > seperated the data upload and process from the data reading process. > > > > I'm not even sure what web2py would do if I removed the migrate=false > > > > flag. What is the recommendation here? > > > > AFAIK, migrate should have no effect on GAE. > > > > > Inserting/deleting items from the GAE Datastore is very expensive in > > > > CPU time, I messed with this yesterday and in a matter of a few > > > > minutes (delete all, re-upload) was over my quota. Because of that > > > > I'd really like to avoid having to change data in the Datastore as > > > > much as I can. With 20K+ items you don't get a lot of 'do-overs'. > > > > Have you enabled billing on your account? Enabiling billing greatly > > > increases your free quota. > > > > Robin > > > > On Sep 19, 2:45 pm, Chris S <sanders.ch...@gmail.com> wrote: > > > > > Background: > > > > Working with an app on GAE currently I've run across a slight issue > > > > with uploading data into my app. I initially tried to download my > > > > tables to CSV from my development machine then use simply re-upload > > > > them into GAE. It's been a while since I tried that but it was timing > > > > out. > > > > > Problem: > > > > Because of that I decided to upload with bulkloader.py. I did my > > > > first table (~2K entries) with out a hitch. My second Table is where > > > > I'm having an issue. This table is about 24K entities. After > > > > uploading all of the data trying to view it on the appadmin returns > > > > the following error (web2py error ticket): > > > > The table is "sqldb.item" if it matters. > > > > ------------- > > > > Traceback (most recent call last): > > > > File "/base/data/home/apps/aion-info/2.336452968225099838/gluon/ > > > > main.py", line 396, in wsgibase > > > > session._try_store_in_db(request, response) > > > > File "/base/data/home/apps/aion-info/2.336452968225099838/gluon/ > > > > globals.py", line 342, in _try_store_in_db > > > > table._db(table.id == record_id).update(**dd) > > > > File "/base/data/home/apps/aion-info/2.336452968225099838/gluon/ > > > > contrib/gql.py", line 698, in update > > > > (item, tablename, fields) = self._getitem_exception() > > > > File "/base/data/home/apps/aion-info/2.336452968225099838/gluon/ > > > > contrib/gql.py", line 632, in _getitem_exception > > > > item = self._db[tablename]._tableobj.get_by_id(long(id)) > > > > File "/base/python_lib/versions/1/google/appengine/ext/db/ > > > > __init__.py", line 943, in get_by_id > > > > return get(*keys) > > > > File "/base/python_lib/versions/1/google/appengine/ext/db/ > > > > __init__.py", line 1123, in get > > > > entities = datastore.Get(keys) > > > > File "/base/python_lib/versions/1/google/appengine/api/ > > > > datastore.py", line 224, in Get > > > > apiproxy_stub_map.MakeSyncCall('datastore_v3', 'Get', req, resp) > > > > File "/base/python_lib/versions/1/google/appengine/api/ > > > > apiproxy_stub_map.py", line 72, in MakeSyncCall > > > > apiproxy.MakeSyncCall(service, call, request, response) > > > > File "/base/python_lib/versions/1/google/appengine/api/ > > > > apiproxy_stub_map.py", line 255, in MakeSyncCall > > > > rpc.CheckSuccess() > > > > File "/base/python_lib/versions/1/google/appengine/api/ > > > > apiproxy_rpc.py", line 111, in CheckSuccess > > > > raise self.exception > > > > CancelledError: The API call datastore_v3.Get() was explicitly > > > > cancelled. > > > > ----------------------------- > > > > > Looking over two tables here are the things I've identified as > > > > possible problems: > > > > 1 - This table has a 'double' in it. Not just int/string like the > > > > working one. For GAE uploading I defined the double field as a GAE > > > > "float" property. Is it possible web2py defines a 'double' as > > > > something else on GAE? If so is there a mapping that would tell me > > > > how to map web2py fields into GAE fields for uploading data? > > > > > 2 - Searching the Data Viewer on GAE shows that due to a previously > > > > failed data upload I now have multiple copies of some of the > > > > entities. These copies the exact same data in the except for the ID/ > > > > Name fields. I would like to remove the duplicates sometime but that > > > > wasn't my first concern. Would duplicate copies cause this problem? > > > > I figured since the ID is unique it would just show up as another > > > > entery in the table. I haven't set any of the entries to 'unique'. > > > > > 3 - Both tables are set with migrate=False, specifically b/c I've > > > > seperated the data upload and process from the data reading process. > > > > I'm not even sure what web2py would do if I removed the migrate=false > > > > flag. What is the recommendation here? > > > > > Inserting/deleting items from the GAE Datastore is very expensive in > > > > CPU time, I messed with this yesterday and in a matter of a few > > > > minutes (delete all, re-upload) was over my quota. Because of that > > > > I'd really like to avoid having to change data in the Datastore as > > > > much as I can. With 20K+ items you don't get a lot of 'do-overs'. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py-users" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---