Confusion :
Lors de l'exécution de requêtes SQL à partir d'un fichier externe, certains développeurs peuvent être confus par les lignes comme :
result = c.execute("SELECT * FROM %s;" % table);
Explication :
Le formatage de chaîne en Python nous permet de remplacer dynamiquement les espaces réservés (%s) par des valeurs. Dans ce cas, %s est remplacé par la valeur de la variable de table, qui est une chaîne représentant le nom de la table. Ainsi, si la table est « Animal », la requête devient « SELECT * FROM Animal ; ».
Utilisation du code fourni :
Le code Python fourni inclut une fonction executeScriptsFromFile qui peut être utilisé pour exécuter toutes les commandes SQL dans un fichier externe.
def executeScriptsFromFile(filename): with open(filename, 'r') as fd: sqlFile = fd.read() sqlCommands = sqlFile.split(';') for command in sqlCommands: try: c.execute(command) except OperationalError as msg: print("Command skipped: ", msg)
Vous pouvez utiliser cette fonction pour exécuter le SQL requêtes dans votre fichier zookeeper.sql :
executeScriptsFromFile('zookeeper.sql')
Requêtes 1.1 et 1.2 :
Les requêtes 1.1 et 1.2 sont déjà incluses dans le fichier zookeeper.sql. Le code ci-dessus les exécutera lorsque le fichier sera chargé.
Code complet :
En combinant la fonctionexecuteScriptsFromFile et le code de boucle de table, votre code Python complet peut être simplifié comme suit :
import sqlite3 from sqlite3 import OperationalError conn = sqlite3.connect('csc455_HW3.db') c = conn.cursor() executeScriptsFromFile('zookeeper.sql') for table in ['ZooKeeper', 'Animal', 'Handles']: result = c.execute("SELECT * FROM %s;" % table) rows = result.fetchall() print("\n--- TABLE ", table, "\n") for desc in result.description: print(desc[0].rjust(22, ' '), end=',') print() # End the line with column names for row in rows: for value in row: print(str(value).rjust(22, ' ')) print() c.close() conn.close()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!