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? >>>> > > >>>> > > >>>> > > -- >>>> > > >>>> > > >>>> > > >>>> > >>>> > -- >>>> > >>>> > >>>> > >>>> >>>> --