I find sometimes the admin shell doesn't work as expected, particularly for
db related operations.
Anthony
On Wednesday, July 25, 2012 6:34:49 PM UTC-4, Mark Li wrote:
>
> Massimo I tried your example and it worked! I was using the web2py web
> shell from the admin interface before, but using the interactive console
> shell through cygwin worked.
>
> Thanks to you, Anthony, and viniciusban for helping out.
>
>
> On Wednesday, July 25, 2012 2:51:01 PM UTC-7, Massimo Di Pierro wrote:
>>
>> I cannot reproduce the problem:
>>
>> $ python web2py.py -S welcome -N
>> >>> db=DAL()
>> >>> db.define_table('testtable',
>> ... Field('column1'),
>> ... Field('column2'),
>> ... Field('column3','string'))
>> >>>
>> db.testtable.import_from_csv_file(open('/Users/massimodipierro/Downloads/example.csv'),null='')
>> >>> print db(db.testtable).select()
>> testtable.id,testtable.column1,testtable.column2,testtable.column3
>> 1,record1,<NULL>,<NULL>
>> 2,record2,text,text
>> 3,record3,text,<NULL>
>>
>>
>> I tested with trunk. Can you try the same example from the shell, as I
>> did?
>>
>> On Wednesday, 25 July 2012 16:27:44 UTC-5, Mark Li wrote:
>>>
>>> I'm using SQLite3 on Windows (running from source). I didn't install
>>> anything extra, just been using SQLite that came with web2py
>>>
>>> I attempted
>>>
>>>
>>> try:
>>> db.testtable.import_from_csv_file('example.csv', null='')
>>>
>>> except:
>>> print db._lastsql
>>> db.rollback()
>>>
>>>
>>>
>>>
>>> However, print db._lastsql doesn't print anything.
>>>
>>> I made a new app and the problem still exists (can't import CSV from
>>> shell and importing from database administration still gives empty string
>>> instead of None).
>>>
>>>
>>> Here is my db.py code:
>>>
>>>
>>> db = DAL('sqlite://storage.sqlite')
>>>
>>> db.define_table('testtable',
>>> Field('column1'),
>>> Field('column2'),
>>> Field('column3','string'))
>>>
>>> From the web2py shell, I use:
>>>
>>> db.testtable.import_from_csv_file('example.csv', null='')
>>>
>>> which gives me the following error
>>>
>>> Traceback (most recent call last):
>>> File "c:\Users\Mark\Documents\dubliners\web2py\gluon\contrib\shell.py"
>>> , line 233, in run
>>> exec compiled in statement_module.__dict__
>>> File "<string>", line 1, in <module>
>>> File "c:\Users\Mark\Documents\dubliners\web2py\gluon\dal.py", line
>>> 6955, in import_from_csv_file
>>> new_id = self.insert(**dict(items))
>>> File "c:\Users\Mark\Documents\dubliners\web2py\gluon\dal.py", line
>>> 6829, in insert
>>> return self._db._adapter.insert(self,self._listify(fields))
>>> File "c:\Users\Mark\Documents\dubliners\web2py\gluon\dal.py", line 928
>>> , in insert
>>> raise e
>>> OperationalError: near ")": syntax error
>>>
>>> The 'example.csv' file is located in my web2py folder.
>>>
>>>
>>>
>>>
>>>
>>> On Wednesday, July 25, 2012 6:23:56 AM UTC-7, Anthony wrote:
>>>>
>>>> Can you attach a sample CSV file that fails, and show your table model
>>>> code as well as any code used to do the import?
>>>>
>>>> Anthony
>>>>
>>>> On Tuesday, July 24, 2012 11:31:27 PM UTC-4, Mark Li wrote:
>>>>>
>>>>> Anthony, I tried
>>>>>
>>>>> db.mytable.import_from_csv_file([file object], null='')
>>>>>
>>>>> from the web2py shell, but it gave me an error:
>>>>>
>>>>> OperationalError: near ")": syntax error
>>>>>
>>>>>
>>>>> In fact, trying to import from csv using the book's method does not
>>>>> work at all, although exporting works fine.
>>>>>
>>>>>
>>>>> Viniciusban, I'm inserting data through the database administation
>>>>> interface (filling out the form). I've also tried importing the CSV file
>>>>> through the administrative interface as well, where all blank spaces in
>>>>> the
>>>>> csv some out to empty strings (unless the field type is 'integer').
>>>>>
>>>>>
>>>>>
>>>>> On Monday, July 23, 2012 10:47:24 PM UTC-7, viniciusban wrote:
>>>>>>
>>>>>> Yes, they are default settings.
>>>>>>
>>>>>> It's quite strange you get empty strings instead null (None, in
>>>>>> Python).
>>>>>>
>>>>>> How are you inserting data into db? Are you using a SQLFORM or
>>>>>> my_table.validate_and_insert() or simply mytable.insert()?
>>>>>>
>>>>>> Do you get same results (blank values) inserting it from web2py shell
>>>>>> using simply mytable.insert()?
>>>>>>
>>>>>> --
>>>>>> Vinicius Assef
>>>>>>
>>>>>>
>>>>>> > On Monday, July 23, 2012 5:58:19 PM UTC-4, Mark Li wrote:
>>>>>> >
>>>>>> > Aren't those the default values for a Field Contructor? I tried
>>>>>> > explicitly adding "notnull=False" and "required=False", and
>>>>>> didn't
>>>>>> > set the default property, but empty values still come out as an
>>>>>> > empty string instead of None.
>>>>>> >
>>>>>> > On Monday, July 23, 2012 2:48:56 PM UTC-7, viniciusban wrote:
>>>>>> >
>>>>>> > As far as I know, let "notnull=False" and "required=False"
>>>>>> for your
>>>>>> > fields and don't set "default" property.
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>> > On 07/23/2012 06:32 PM, Mark Li wrote:
>>>>>> > > Unfortunately the lambda method didn't work, Anthony. Any
>>>>>> other ideas
>>>>>> > > for having a None default for empty entries?
>>>>>> > >
>>>>>> > >
>>>>>> > > On a side note, if the 'integer' field type is used, then
>>>>>> a blank entry
>>>>>> > > results in a None. Don't know if that helps but it's
>>>>>> something I've noticed.
>>>>>> > >
>>>>>> > > On Monday, July 23, 2012 2:07:51 PM UTC-7, Anthony wrote:
>>>>>> > >
>>>>>> > > To enter a value of None, this might work:
>>>>>> > >
>>>>>> > > |
>>>>>> > > default=lambda:None
>>>>>> > > |
>>>>>> > >
>>>>>> > > Anthony
>>>>>> > >
>>>>>> > > On Monday, July 23, 2012 5:04:44 PM UTC-4, Anthony
>>>>>> wrote:
>>>>>> > >
>>>>>> > > default=None means that no default is specified,
>>>>>> not that a
>>>>>> > > default value of None will be inserted.
>>>>>> > >
>>>>>> > > Anthony
>>>>>> > >
>>>>>> > > On Monday, July 23, 2012 5:02:33 PM UTC-4, Mark
>>>>>> Li wrote:
>>>>>> > >
>>>>>> > > I have a table defined in the following
>>>>>> manner:
>>>>>> > >
>>>>>> > > db.define_table('songinfo',
>>>>>> > > Field('songtitle'),
>>>>>> > > Field('artist'))
>>>>>> > >
>>>>>> > > When I add an empty entry, or upload a CSV
>>>>>> with empty
>>>>>> > > values, I can only access those values with a
>>>>>> database call like
>>>>>> > >
>>>>>> > > songs = db(db.songinfo.artist=="").select()
>>>>>> > >
>>>>>> > > as opposed to
>>>>>> db(db.songinfo.artist==None).select()
>>>>>> > >
>>>>>> > >
>>>>>> > > The web2py book states that fields
>>>>>> default=None, but I'm
>>>>>> > > getting an empty string. Is there an
>>>>>> appropriate way to have
>>>>>> > > None instead of an empty string in the
>>>>>> database?
>>>>>> > >
>>>>>> > >
>>>>>> > > --
>>>>>> > >
>>>>>> > >
>>>>>> > >
>>>>>> >
>>>>>> > --
>>>>>> >
>>>>>> >
>>>>>> >
>>>>>>
>>>>>>
--