On 4/10/15 5:05 PM, Shola Smith wrote:
Sir,

The script is able to create the tables in the database however, at the point of entering the data, it comes crashing with the following log

:
2015-04-10 22:01:53,263 INFO sqlalchemy.engine.base.Engine ()
2015-04-10 22:01:54,308 INFO sqlalchemy.engine.base.Engine COMMIT
2015-04-10 22:01:54,342 INFO sqlalchemy.engine.base.Engine BEGIN (implicit) 2015-04-10 22:01:54,345 INFO sqlalchemy.engine.base.Engine INSERT INTO `User` (`FirstName`, `LastName`, `Email`, `PwdHash`) VALUES (%s, %s, %s, %s) 2015-04-10 22:01:54,345 INFO sqlalchemy.engine.base.Engine ('Coffee', 'Shop', '[email protected] <mailto:[email protected]>', '12677563I7^54') 2015-04-10 22:01:54,351 INFO sqlalchemy.engine.base.Engine INSERT INTO `Payment` (`uidPayer`, `uidReceiver`, amount) VALUES (%s, %s, %s) 2015-04-10 22:01:54,352 INFO sqlalchemy.engine.base.Engine (<__main__.User object at 0x02FF39F0>, <__main__.User object at 0x02FFE210>, 25)
2015-04-10 22:01:54,352 INFO sqlalchemy.engine.base.Engine ROLLBACK
e = expected string or buffer
oh. Sorry, yes I am getting that, the way you're catching the exception in the script threw me off (thought it succeeded because there was no stack trace).

You need to set those User objects against the relationship you've set up, "payer" and "receiver", not the FK column name uidPayer, uidReceiver:

class Payment(Base):
    __tablename__ = "Payment"
    id = Column(Integer, primary_key=True)
    uidPayer = Column(Integer, ForeignKey("User.ID"))
    uidReceiver = Column(Integer, ForeignKey("User.ID"))
    amount = Column(Float)

    def __init__(self, payer, receiver, amount):
        self.payer = payer
        self.receiver = receiver
        self.amount = amount


then you see this:

2015-04-10 18:07:49,750 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-04-10 18:07:49,751 INFO sqlalchemy.engine.base.Engine INSERT INTO `User` (`FirstName`, `LastName`, `Email`, `PwdHash`) VALUES (%s, %s, %s, %s) 2015-04-10 18:07:49,751 INFO sqlalchemy.engine.base.Engine ('Coffee', 'Shop', '[email protected]', '12677563I7^54') 2015-04-10 18:07:49,752 INFO sqlalchemy.engine.base.Engine INSERT INTO `User` (`FirstName`, `LastName`, `Email`, `PwdHash`) VALUES (%s, %s, %s, %s) 2015-04-10 18:07:49,752 INFO sqlalchemy.engine.base.Engine ('Coder', 'Shop', '[email protected]', '1254677563I7^') 2015-04-10 18:07:49,753 INFO sqlalchemy.engine.base.Engine INSERT INTO `Payment` (`uidPayer`, `uidReceiver`, amount) VALUES (%s, %s, %s)
2015-04-10 18:07:49,753 INFO sqlalchemy.engine.base.Engine (1, 2, 25)
2015-04-10 18:07:49,754 INFO sqlalchemy.engine.base.Engine COMMIT


In the logged parameters you should make sure you see numbers and strings, not things like <User object at 0xXYZ> that can't be passed to the database adapter directly.




:

I'm on Windows 7. I've also changed the uppercase names to lower case but it still persists. A comprehensive error log is below:

Traceback (most recent call last):
File "C:/Users/shola.smith/PycharmProjects/oSchool/entities/trials.py", line 54, in <module>
    db.session.commit()
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\scoping.py", line 150, in do
    return getattr(self.registry(), name)(*args, **kwargs)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\session.py", line 776, in commit
    self.transaction.commit()
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\session.py", line 377, in commit
    self._prepare_impl()
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\session.py", line 357, in _prepare_impl
    self.session.flush()
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\session.py", line 1919, in flush
    self._flush(objects)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\session.py", line 2037, in _flush
    transaction.rollback(_capture_exception=True)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\util\langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\session.py", line 2001, in _flush
    flush_context.execute()
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 372, in execute
    rec.execute(self)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 526, in execute
    uow
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\persistence.py", line 65, in save_obj
    mapper, table, insert)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\orm\persistence.py", line 602, in _emit_insert_statements
    execute(statement, params)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\engine\base.py", line 729, in execute
    return meth(self, multiparams, params)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\sql\elements.py", line 322, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\engine\base.py", line 826, in _execute_clauseelement
    compiled_sql, distilled_params
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\engine\base.py", line 958, in _execute_context
    context)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\engine\base.py", line 1162, in _handle_dbapi_exception
    util.reraise(*exc_info)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\engine\base.py", line 951, in _execute_context
    context)
File "C:\code-environs\iflask\lib\site-packages\sqlalchemy\engine\default.py", line 436, in do_execute
    cursor.execute(statement, parameters)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\cursors.py", line 132, in execute
    query = query % self._escape_args(args, conn)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\cursors.py", line 98, in _escape_args
    return tuple(conn.escape(arg) for arg in args)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\cursors.py", line 98, in <genexpr>
    return tuple(conn.escape(arg) for arg in args)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\connections.py", line 729, in escape
    return escape_item(obj, self.charset, mapping=mapping)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\converters.py", line 33, in escape_item
    val = encoder(val, mapping)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\converters.py", line 74, in escape_unicode
    return escape_str(value, mapping)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\converters.py", line 71, in escape_str
    return "'%s'" % escape_string(value, mapping)
File "C:\code-environs\iflask\lib\site-packages\pymysql-0.6.6-py2.7.egg\pymysql\converters.py", line 68, in escape_string
    lambda match: ESCAPE_MAP.get(match.group(0)), value),))
TypeError: expected string or buffer


On Fri, Apr 10, 2015 at 9:27 PM, Mike Bayer <[email protected] <mailto:[email protected]>> wrote:



    On 4/10/15 4:10 PM, Shola Smith wrote:
    I am unable to make reference between two tables work using
    flask-sqlalchemy. Please find attached the file.

    I get an error "expected string or buffer". Please, could someone
    tell me what I am doing wrong? And the best way to go about it.
    Thanks
    the script works fine to me, though I'm running it without the
    flask dependency.   Can you post the full stack trace for the
    error message?    Also what OS is this, as I see you are using
    case-sensitive identifier names for columns and MySQL has a
    problem with that based on platform.



-- 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 [email protected]
    <mailto:[email protected]>.
    To post to this group, send email to [email protected]
    <mailto:[email protected]>.
    Visit this group at http://groups.google.com/group/sqlalchemy.
    For more options, visit https://groups.google.com/d/optout.

-- You received this message because you are subscribed to a topic in
    the Google Groups "sqlalchemy" group.
    To unsubscribe from this topic, visit
    https://groups.google.com/d/topic/sqlalchemy/laklD523fhY/unsubscribe.
    To unsubscribe from this group and all its topics, send an email
    to [email protected]
    <mailto:[email protected]>.
    To post to this group, send email to [email protected]
    <mailto:[email protected]>.
    Visit this group at http://groups.google.com/group/sqlalchemy.
    For more options, visit https://groups.google.com/d/optout.


--
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 [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to