I would like to call a function with another function as argument, which is not yet defined and callable. Is there a pythonic way how to do this?
I know that you can give a function as an argument for another function, like this answer suggests:
Python function as a function argument?
But this somehow is not possible for functions which are not yet defined and callable.
I wrote a lot of those repetitive code recently and I'm pretty sure there must be a more pythonic way to do this.
Repetitive code:
import pymysql
def database_connection():
return pymysql.connect(db="MyDatabase", user='root', host="127.0.0.1", password="SecretPassword")
def mysql_request_true(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = True
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_database_id(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cursor.lastrowid
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_fetchone(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cursor.fetchone()
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_fetchall(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cursor.fetchall()
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
What I try to achieve:
import pymysql
def database_connection():
return pymysql.connect(db="MyDatabase", user='root', host="127.0.0.1", password="SecretPassword")
def mysql_request(sql_text, cmd):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cmd
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_true(sql_text):
return mysql_request(sql_text, True)
def mysql_request_database_id(sql_text):
return mysql_request(sql_text, cmd=cursor.lastrowid)
def mysql_request_fetchone(sql_text):
return mysql_request(sql_text, cmd=cursor.fetchone())
def mysql_request_fetchall(sql_text):
return mysql_request(sql_text, cmd=cursor.fetchall())
The code sample above does not work, because cursor is not yet defined when I give it as an argument.
Does anybody know how to do this? Thank you very much for your answers.