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.