Bonjour
J'ai un script python où je fais une requete SQL ver sune base avec duckdb.
voici mon code main.py :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import duckdb
import pandas as pd
import utils.func
 
con = duckdb.connect(database="db.duckdb", read_only=False)
 
data = {
    "id": ["1","2","3","4","5","6",],
    "group": ["A","A","A","B","B","B",],
    "names": ["aze","www","ttt","xxxxxx","llllll","ggggggg",],
}
 
data_df = pd.DataFrame(data)
con.execute("CREATE TABLE IF NOT EXISTS data AS SELECT * FROM data_df")
 
my_query="select * from data"
 
res = utils.func.query(con, my_query)
print(res)
j'ai donc une fonction pour executer ma requete.
cette fonction prend 2 arguments: ma connexion à la db et la requete.

cette fonction est ecrtie dans un autre script qui s'appelle func.py.

voici func.oy :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
def query(DB_connection, query):
    print('appel')
    result=DB_connection.execute(query).df()
    return result
je n'importe pas duckdb ou pandas dans ce script func.py.
pourtant, dans cette fonction je fais appel aux methodes execute() de duckcb ou df() de pandas.

je lance le script main.py et ca marche bien. Je comprends pas, je pensais que ca allait planter car func.py n'est pas supposé connaitre les methiodes execute() et df() non?

pourquoi ca marche?
ca veut dire que je n'ai besoin d'importer les modules que dans le main?

merci