Change value from SQL command output to match python syntax

Question:

I’m a newbie regarding SQL and PostgreSQL and database management, but I need a database for a discord bot I’m making. I’m using asyncpg to manage a database with python

Now, let’s say I have a command which has to find if username already exists in that database:

try:
            with open("creds.json", "r") as file:  
                creds = json.load(file)
            print("n" + "Connecting to database")    
            host = creds["DB_HOST"]
            user = creds["DB_USER"]
            password = creds["DB_TOKEN"]
            database = creds["DB_NAME"]
            conn = await asyncpg.connect(host=host, user=user, password=password, database=database)
            print("n"+ f"PostgreSQL connection to database stablished successfully")
            exists = await conn.fetch('''
SELECT EXISTS (
SELECT 1 
FROM table 
WHERE username=($1)); 
''', str(discordusername#1234)) 
            await conn.close()  
            print("Query finished, connection to database closed")        
            print(exists)

It either returns True or False in this form [<Record exists=False>] or [<Record exists=True>], so to check if its true or false I have to convert the ‘exists’ to a string and then compare it to either [<Record exists=False>] or [<Record exists=False>] as a string:

if str(exists) == "[<Record exists=False>]":
    ...
elif str(exists) == "[<Record exists=True>]"
    ...

Is there anyway to ‘convert’ [<Record exists=False>] to a plain False and [<Record exists=False>] to a plain True that Python can directly understand?

same goes when getting a value from a table, say, and int that have to be addressed the same way, returning, for example,

[<Record rowname=5>]
Asked By: Carlos Mediavilla

||

Answers:

fetch() returns list of records, one record for each returned row.

    result = await conn.fetch(my_query)

    # print the value of column 'exists' of the first row (number 0)
    print(result[0]['exists'])
    
    # print the value of the first column of the first row
    print(result[0][0])

Read more about asyncpg.Record.

Answered By: klin
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.