Re: [sqlalchemy] Error on insert, warning from mysqldb
Thanks, Michael. I found it the one place I hadn't looked 12 times. :-) On Dec 18, 2011, at 10:51 AM, Michael Bayer wrote: > > On Dec 18, 2011, at 1:25 PM, Lee Hinde wrote: > >> I'm brand new to sqlalchemy, and reasonably new to python. I'm working on >> migrating data from one MySQL database to another at Amazon's RDS. >> >> I have one TinyInt field,'Error' and if the value in that field is 1, then I >> get a warning from MySQLdb : >> >> /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: >> Warning: Incorrect integer value: 'appuser_id' for column 'Error' at row 1 >> /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: >> Warning: Incorrect integer value: '' for column 'Error' at row 1 >> /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: >> Warning: Incorrect integer value: 'TEST-USER-WITH-FULL-PREFS-AND-FAVES' for >> column 'Error' at row 1 >> >> The incorrect value being reported is from the varchar User_ID field. >> Everything but the Error field gets migrated fine, including the User_ID >> field which this warning would suggest is in the wrong column. If Error == >> 0, no warning is issued. > > This means you're assigning a string value to an integer field in a > statement. When you do your thing with wrl(...fields...), make sure all the > fields match up to their types/names correctly. > > you can also put a @validates to check for it: > > class MyClass(Base): >... > > @validates('Error') > def check_for_int(self, key, value): >if not isinstance(value, int): >raise TypeError("integer expected here") >return value > > see http://www.sqlalchemy.org/docs/orm/mapper_config.html#simple-validators > > > > > > >> >> Any pointers appreciated. >> >> The structures of the sending and receiving tables are identical. As >> reported by sqlalchemy's reflection tool: >> >> UUID_PK VARCHAR(36) >> Web_Request_Headers TEXT >> Web_Request_Body TEXT >> Current_Machine VARCHAR(40) >> HTTP_StatusSent INTEGER(11) >> ResponseBody MEDIUMTEXT >> Full_Log_Message TEXT >> Remote_Address VARCHAR(60) >> basic_auth_username VARCHAR(30) >> Request_Method VARCHAR(12) >> Request_URI VARCHAR(60) >> Request_Protocol VARCHAR(12) >> Time_To_Process_Request INTEGER(11) >> User_ID VARCHAR(36) >> Error TINYINT(4) >> Added_Timestamp VARCHAR(16) >> Processing_Time_Milliseconds INTEGER(11) >> mysql_timestamp TIMESTAMP >> >> I have this model.py: >> >> from sqlalchemy.ext.declarative import declarative_base >> >> Base = declarative_base() >> >> from sqlalchemy import Column, Integer, String, Text, DateTime, SmallInteger >> >> class wrl(Base): >> __tablename__ = 'web_request_log' >> UUID_PK = Column(String(36),primary_key=True) >> Web_Request_Headers = Column(Text) >> Web_Request_Body = Column(Text) >> Current_Machine = Column(String(40)) >> HTTP_StatusSent = Column(Integer) >> ResponseBody = Column(Text) >> Full_Log_Message = Column(Text) >> Remote_Address = Column(String(60)) >> basic_auth_username = Column(String(30)) >> Request_Method = Column(String(12)) >> Request_URI = Column(String(60)) >> Request_Protocol = Column(String(12)) >> Time_To_Process_Request = Column(Integer) >> User_ID = Column(String(36)) >> Error = Column(SmallInteger) >> Added_Timestamp = Column(String(16)) >> Processing_Time_Milliseconds = Column(Integer) >> mysql_timestamp = Column(DateTime) >> >> >> def >> __init__(self,UUID_PK,Web_Request_Headers,Web_Request_Body,Current_Machine,HTTP_StatusSent,ResponseBody,Full_Log_Message, >> Remote_Address, >> >> basic_auth_username,Request_Method,Request_URI,Request_Protocol,Time_To_Process_Request,User_ID,Error,Added_Timestamp,Processing_Time_Milliseconds, >> mysql_timestamp): >>self.UUID_PK = UUID_PK >>self.Web_Request_Headers = Web_Request_Headers >>self.Web_Request_Body = Web_Request_Body >>self.Current_Machine = Current_Machine >>self.HTTP_StatusSent = HTTP_StatusSent >>self.ResponseBody = ResponseBody >>self.Full_Log_Message = Full_Log_Message >>self.Remote_Address = Remote_Address >>self.basic_auth_username = basic_auth_username >>self.Request_Method = Request_Method >>self.Request_URI = Request_URI >>self.Request_Protocol = Request_Protocol >>self.Time_To_Process_Request = Time_To_Process_Request >>self.User_ID = User_ID >>self.Error = User_ID >>self.Added_Timestamp = Added_Timestamp >>self.Processing_Time_Milliseconds = Processing_Time_Milliseconds >>self.mysql_timestamp = mysql_timestamp >> >> >> And I have this method: >> >> #login and query stuff, which is working fine, removed; >> >> for x in move_me: >> wrl_rec = wrl(x.UUID_PK, >>
Re: [sqlalchemy] Error on insert, warning from mysqldb
On Dec 18, 2011, at 1:25 PM, Lee Hinde wrote: > I'm brand new to sqlalchemy, and reasonably new to python. I'm working on > migrating data from one MySQL database to another at Amazon's RDS. > > I have one TinyInt field,'Error' and if the value in that field is 1, then I > get a warning from MySQLdb : > > /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: > Warning: Incorrect integer value: 'appuser_id' for column 'Error' at row 1 > /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: > Warning: Incorrect integer value: '' for column 'Error' at row 1 > /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: > Warning: Incorrect integer value: 'TEST-USER-WITH-FULL-PREFS-AND-FAVES' for > column 'Error' at row 1 > > The incorrect value being reported is from the varchar User_ID field. > Everything but the Error field gets migrated fine, including the User_ID > field which this warning would suggest is in the wrong column. If Error == 0, > no warning is issued. This means you're assigning a string value to an integer field in a statement. When you do your thing with wrl(...fields...), make sure all the fields match up to their types/names correctly. you can also put a @validates to check for it: class MyClass(Base): ... @validates('Error') def check_for_int(self, key, value): if not isinstance(value, int): raise TypeError("integer expected here") return value see http://www.sqlalchemy.org/docs/orm/mapper_config.html#simple-validators > > Any pointers appreciated. > > The structures of the sending and receiving tables are identical. As reported > by sqlalchemy's reflection tool: > > UUID_PK VARCHAR(36) > Web_Request_Headers TEXT > Web_Request_Body TEXT > Current_Machine VARCHAR(40) > HTTP_StatusSent INTEGER(11) > ResponseBody MEDIUMTEXT > Full_Log_Message TEXT > Remote_Address VARCHAR(60) > basic_auth_username VARCHAR(30) > Request_Method VARCHAR(12) > Request_URI VARCHAR(60) > Request_Protocol VARCHAR(12) > Time_To_Process_Request INTEGER(11) > User_ID VARCHAR(36) > Error TINYINT(4) > Added_Timestamp VARCHAR(16) > Processing_Time_Milliseconds INTEGER(11) > mysql_timestamp TIMESTAMP > > I have this model.py: > > from sqlalchemy.ext.declarative import declarative_base > > Base = declarative_base() > > from sqlalchemy import Column, Integer, String, Text, DateTime, SmallInteger > > class wrl(Base): >__tablename__ = 'web_request_log' >UUID_PK = Column(String(36),primary_key=True) >Web_Request_Headers = Column(Text) >Web_Request_Body = Column(Text) >Current_Machine = Column(String(40)) >HTTP_StatusSent = Column(Integer) >ResponseBody = Column(Text) >Full_Log_Message = Column(Text) >Remote_Address = Column(String(60)) >basic_auth_username = Column(String(30)) >Request_Method = Column(String(12)) >Request_URI = Column(String(60)) >Request_Protocol = Column(String(12)) >Time_To_Process_Request = Column(Integer) >User_ID = Column(String(36)) >Error = Column(SmallInteger) >Added_Timestamp = Column(String(16)) >Processing_Time_Milliseconds = Column(Integer) >mysql_timestamp = Column(DateTime) > > >def > __init__(self,UUID_PK,Web_Request_Headers,Web_Request_Body,Current_Machine,HTTP_StatusSent,ResponseBody,Full_Log_Message, > Remote_Address, > > basic_auth_username,Request_Method,Request_URI,Request_Protocol,Time_To_Process_Request,User_ID,Error,Added_Timestamp,Processing_Time_Milliseconds, >mysql_timestamp): > self.UUID_PK = UUID_PK > self.Web_Request_Headers = Web_Request_Headers > self.Web_Request_Body = Web_Request_Body > self.Current_Machine = Current_Machine > self.HTTP_StatusSent = HTTP_StatusSent > self.ResponseBody = ResponseBody > self.Full_Log_Message = Full_Log_Message > self.Remote_Address = Remote_Address > self.basic_auth_username = basic_auth_username > self.Request_Method = Request_Method > self.Request_URI = Request_URI > self.Request_Protocol = Request_Protocol > self.Time_To_Process_Request = Time_To_Process_Request > self.User_ID = User_ID > self.Error = User_ID > self.Added_Timestamp = Added_Timestamp > self.Processing_Time_Milliseconds = Processing_Time_Milliseconds > self.mysql_timestamp = mysql_timestamp > > > And I have this method: > > #login and query stuff, which is working fine, removed; > > for x in move_me: >wrl_rec = wrl(x.UUID_PK, >x.Web_Request_Headers, >x.Web_Request_Body, >x.Current_Machine, >x.HTTP_StatusSent, >x.ResponseBody, >x.Full_Log_Message, >x.Re
[sqlalchemy] Error on insert, warning from mysqldb
I'm brand new to sqlalchemy, and reasonably new to python. I'm working on migrating data from one MySQL database to another at Amazon's RDS. I have one TinyInt field,'Error' and if the value in that field is 1, then I get a warning from MySQLdb : /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: Warning: Incorrect integer value: 'appuser_id' for column 'Error' at row 1 /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: Warning: Incorrect integer value: '' for column 'Error' at row 1 /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg/MySQLdb/cursors.py:206: Warning: Incorrect integer value: 'TEST-USER-WITH-FULL-PREFS-AND-FAVES' for column 'Error' at row 1 The incorrect value being reported is from the varchar User_ID field. Everything but the Error field gets migrated fine, including the User_ID field which this warning would suggest is in the wrong column. If Error == 0, no warning is issued. Any pointers appreciated. The structures of the sending and receiving tables are identical. As reported by sqlalchemy's reflection tool: UUID_PK VARCHAR(36) Web_Request_Headers TEXT Web_Request_Body TEXT Current_Machine VARCHAR(40) HTTP_StatusSent INTEGER(11) ResponseBody MEDIUMTEXT Full_Log_Message TEXT Remote_Address VARCHAR(60) basic_auth_username VARCHAR(30) Request_Method VARCHAR(12) Request_URI VARCHAR(60) Request_Protocol VARCHAR(12) Time_To_Process_Request INTEGER(11) User_ID VARCHAR(36) Error TINYINT(4) Added_Timestamp VARCHAR(16) Processing_Time_Milliseconds INTEGER(11) mysql_timestamp TIMESTAMP I have this model.py: from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sqlalchemy import Column, Integer, String, Text, DateTime, SmallInteger class wrl(Base): __tablename__ = 'web_request_log' UUID_PK = Column(String(36),primary_key=True) Web_Request_Headers = Column(Text) Web_Request_Body = Column(Text) Current_Machine = Column(String(40)) HTTP_StatusSent = Column(Integer) ResponseBody = Column(Text) Full_Log_Message = Column(Text) Remote_Address = Column(String(60)) basic_auth_username = Column(String(30)) Request_Method = Column(String(12)) Request_URI = Column(String(60)) Request_Protocol = Column(String(12)) Time_To_Process_Request = Column(Integer) User_ID = Column(String(36)) Error = Column(SmallInteger) Added_Timestamp = Column(String(16)) Processing_Time_Milliseconds = Column(Integer) mysql_timestamp = Column(DateTime) def __init__(self,UUID_PK,Web_Request_Headers,Web_Request_Body,Current_Machine,HTTP_StatusSent,ResponseBody,Full_Log_Message, Remote_Address, basic_auth_username,Request_Method,Request_URI,Request_Protocol,Time_To_Process_Request,User_ID,Error,Added_Timestamp,Processing_Time_Milliseconds, mysql_timestamp): self.UUID_PK = UUID_PK self.Web_Request_Headers = Web_Request_Headers self.Web_Request_Body = Web_Request_Body self.Current_Machine = Current_Machine self.HTTP_StatusSent = HTTP_StatusSent self.ResponseBody = ResponseBody self.Full_Log_Message = Full_Log_Message self.Remote_Address = Remote_Address self.basic_auth_username = basic_auth_username self.Request_Method = Request_Method self.Request_URI = Request_URI self.Request_Protocol = Request_Protocol self.Time_To_Process_Request = Time_To_Process_Request self.User_ID = User_ID self.Error = User_ID self.Added_Timestamp = Added_Timestamp self.Processing_Time_Milliseconds = Processing_Time_Milliseconds self.mysql_timestamp = mysql_timestamp And I have this method: #login and query stuff, which is working fine, removed; for x in move_me: wrl_rec = wrl(x.UUID_PK, x.Web_Request_Headers, x.Web_Request_Body, x.Current_Machine, x.HTTP_StatusSent, x.ResponseBody, x.Full_Log_Message, x.Remote_Address, x.basic_auth_username, x.Request_Method, x.Request_URI, x.Request_Protocol, x.Time_To_Process_Request, x.User_ID, x.Error, x.Added_Timestamp, x.Processing_Time_Milliseconds, x.mysql_timestamp) try: aws.add(wrl_rec) print 'added %s' % x.UUID_PK except Exception, E: print 'error %s' % x.UUID_PK print E else: rs.delete(x) try: aws.commit() # if we can commit the aws push, then it's ok to commit the delete on RS except Exception, E: print 'error %s' % E else: rs.commit() -- You received this messa