This is something I just stumbled upon as a weird exception. Basically I have a bot that I send a slash command to (discord.py) and it takes that username and queries a MySQL table I have. This works for nearly all usernames I have tested including my own--vxnii--but just today I was trying to actually use it and attempted to send the request with the username '1ooh', and no matter what I tried I could not get it to work, not sure if its a quirk with SQLAlchemy or what.
Here is the function:
@app_commands.command(description="Checks keys belonging to a user.")
@is_owner()
async def keys(self, interaction: discord.Interaction, member: discord.Member):
user = member
print(member)
try:
await interaction.response.defer()
duser = session.query(Discord).ilike(username=str(user.name).strip()).first()
print(duser)
keyEmbed = discord.Embed(title=duser.key, description=f"{user.mention}'s Keys.", color=0x3498db)
await interaction.followup.send(embed=keyEmbed)
except AttributeError as E:
print(E)
So I have access to the table through MySQL workbench and can 100% confirm the value exists and when I search for it in the workbench it comes right up and is clean with no spaces on either side of it. I tried a few variations of this one using just like instead of ilike
duser = session.query(Discord).like(username=str(user.name).strip()).first()
aswell as just
duser = session.query(Discord).filter_by(username=str(user.name).strip()).first()
None of these worked, however I did find a solution eventually:
@app_commands.command(description="Checks keys belonging to a user.")
@is_owner()
async def keys(self, interaction: discord.Interaction, member: discord.Member):
user = member
sname = str(user.name).strip()
print(sname)
try:
await interaction.response.defer()
query = text("SELECT * FROM discord WHERE username LIKE :sname")
duser = session.execute(query, {"sname": f"%{sname}%"}).fetchone()
print(duser)
keyEmbed = discord.Embed(title=duser.key, description=f"{user.mention}'s Keys.", color=0x3498db)
await interaction.followup.send(embed=keyEmbed)
except AttributeError as E:
print(E)
Using a raw SQL query which should do the same thing as the .like query type I managed to get it to return the intended result. Anyway I do have a solution so thats good, but I am really interested if anyone knows why this is acting as it is, or maybe im just missing something super obvious.
(What I mean by not working is it returning 'None' when searhcing with the above queries)
echofor your engine, look on SQL query produced by SQLAlchemy and compare it with your raw SQL