I have a file that I download from the internet. It is in .xls format. I 
need to save the data to an sql database. So I extract the data as follows:

import xlrd
wb = xlrd.open_workbook(file_contents=xls_file_name.read())
sh = wb.sheet_by_name('Sheet1')
data = [sh.row_values(r) for r in range(sh.nrows)] 

engine = create_engine('mysql://blah:blah@localhost/blah')# Metadata is a Table 
catalog. 
metadata = MetaData()
hockey= Table(table_name, metadata, autoload=True, autoload_with=engine)
column_names = tuple(c.name for c in hockey.c)
final_data = [dict(zip(column_names, x)) for x in data]
ins = hockey.insert()
conn = engine.connect()
conn.execute(ins, final_data)
conn.close()


SQLALchemy error:

sqlalchemy.exc.OperationalError: (OperationalError) (1366, "Incorrect decimal 
value: '' for column 'rtc_mvl' at row 44") 
Table('hockey', MetaData(None), Column(u'team', MSString(length=16),
table=<hockey>, primary_key=True, nullable=False,
server_default=DefaultClause('', for_update=False)),Column(u'jersey_colour', 
MSString(length=16), table=<hockey>),Column(u'stadium', MSString(length=32), 
table=<hockey>),Column(u'goals', MSInteger(display_width=11), 
table=<hockey>),Column(u'rtc_mvl', MSDecimal(precision=11, scale=1, 
asdecimal=True),
table=<hockey>), Column(u'rtc_date', MSDate(), table=<hockey>,
primary_key=True, nullable=False,
server_default=DefaultClause('0000-00-00', for_update=False)))


Unfortunately, I have a column that can have empty/blank values. It is a 
field that I define as a decimal in mysql database. When I attempt to 
insert I obviously get an error described below. What I need to do is 
remove the '' string when a cell is empty/blank. I haven't been able to 
find examples of how I can do this on stackoverflow or in the xlrd 
documentation. I tried to do something like the following but it does not 
remove the '' string:

for item_index in range(0, len(data)):
    item = data[item_index]
    if item[5] == '':
        item[5] == None
    data[item_index] = item


I even tried to write the object to a csv file and re-load it to see the 
value of the empty cells. 


my_file = open('csv_temp.csv', 'wb')
writer = csv.writer(my_file)for rownum in xrange(len(file_csv)):
    writer.writerow(file_csv[rownum])

my_data = []
my_file = open('csv_temp.csv', 'rb')
reader = csv.reader(myfile)for row in reader:
    my_data.append(row)

Here is the row entry of my_data that has an empty cell (column 6 or list 
index 5).


 ['green eggs and ham',
  'milk chocolate',
  'oranges and banana',
  '01:05',
  '-1.01',
  '',
  '2013-03-26',
  '2']

You can see the '' field. How can I get SQLAlchemy to understand that '' is 
a blank/null?

I appreciate the help. 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to