On 02/22/2017 04:23 PM, Chris Frey wrote:
Hi,

We're using MySQL, and we have tables that use a GUID as the ID.
Unfortunately, if the GUID starts with a number, and if you select
using an integer, mysql will helpfully convert for you:

mysql> select id from table where id = 2;
+-----------------------------------------+
| id                                      |
+-----------------------------------------+
| 2ceb-d632-f330-4e7c-8490-90b7-5a02-e633 |
+-----------------------------------------+
1 row in set, 7 warnings (0.00 sec)

GUID is a string, since that's the only option available, so that is insane. None of the SQL mode options even seem to affect it.


This comes from a query like this in SQLAlchemy:

        record = session.query(Table).filter(Table.id == 2).first()

Is there any way to force the resulting SQL to use the type of Table.id
instead of the integer type of 2?

Obviously it's a little odd you are feeding an integer into your query. If you want to enforce the type do this:

from sqlalchemy.types import TypeDecorator

class MustBeString(TypeDecorator):
    impl = String

    def process_bind_param(self, value, dialect):
        if not isinstance(value, str):
            raise ValueError("value must be string!!!")
        return value

since you're using GUID, you can use the recipe at http://docs.sqlalchemy.org/en/latest/core/custom_types.html#backend-agnostic-guid-type which has a more comprehensive approach, just alter the bind_param routine to whatever you want it to do.




Or is there a better way to handle this?

Thanks,
- Chris


--
SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 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 https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to