2017-03-24 2 views
-2

J'ai cette requête dans un programme python:Comment obtenir des colonnes d'une requête en python?

et je créer un tableau multidimensionnel (si possible) ou quatre tableaux de cette requête pour chaque colonne de la requête. Pouvez-vous suggérer une manière élégante de le résoudre?

conn = #connection to the server 
cursor=conn.cursor() 
query = (" select id, name, phone, city from guest") 

cursor.execute(query) 
results = cursor.fetchall 
for i in results: 
    print i 
cursor.close() 
conn.close() 
+1

Permet de voir ce que vous avez dans le code, afin que nous puissions vous aider à obtenir le résultat. – karthikr

+0

Une requête de quoi exactement? –

+0

ressemble à [pandas] (http://pandas.pydata.org/) est ce que vous avez besoin – Copperfield

Répondre

-1

pas élégant, mais il peut aider à démêler le mystérieux connecteur classe curseur Python et transfère la liste des tuples (voir le commentaire Copperfield) avec les données de la requête, dans une liste (phoneList) des dictionnaires (entrées) avec les détails de chaque entrée dans la base de données, qui pourrait être plus facile de travailler avec votre script python:

# ref: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor.html 
import mysql.connector 

db = 'test' 
table = 'phonebook' 
phoneList = [] 

drop_table = ("DROP TABLE IF EXISTS {};").format(table) 
# By default, the starting value for AUTO_INCREMENT is 1, and it will increment by 1 for each new record. 
# To let the AUTO_INCREMENT sequence start with another value, use the following SQL statement: 
# ALTER TABLE phonebook AUTO_INCREMENT=100; 
create_table = ("CREATE TABLE {} (" 
      "id int NOT NULL AUTO_INCREMENT," 
      "name varchar(30) NOT NULL," 
      "phone varchar(30) NOT NULL," 
      "city varchar(30) NOT NULL," 
      "PRIMARY KEY (id))" 
      " ENGINE=InnoDB DEFAULT CHARSET=latin1;").format(table) 

Names = {'Bill':{'phone':'55123123','city':'Melbourne'}, 
    'Mary':{'phone':'77111123','city':'Sydney'}, 
    'Sue':{'phone':'55888123','city':'Melbourne'}, 
    'Harry':{'phone':'77777123','city':'Sydney'}, 
    'Fred':{'phone':'88123444','city':'Yongala'}, 
    'Peter':{'phone':'55999123','city':'Melbourne'}} 


cnx = mysql.connector.connect(user='mysqluser', password='xxxx',host='127.0.0.1',database=db) 
cursor = cnx.cursor(dictionary=True) # key to using **row format 
cursor.execute(drop_table) 
cursor.execute(create_table) 
# populate db 
for name,detail in dict.items(Names): 
    sql = ("INSERT INTO {} (name,phone,city) VALUES ('{}','{}','{}')".format(table,name,detail['phone'],detail['city'])) 
    cursor.execute(sql) 

sql = ("SELECT id,name,phone,city FROM {}".format(table)) 
cursor.execute(sql) 

for row in cursor: 
    print("{id} {name} {phone} {city}".format(**row)) 
    phoneList.append(row) 

print phoneList[0]['name'],phoneList[0]['city'] 
print phoneList[3]['name'],phoneList[3]['phone'] 


for entries in phoneList: # list of dictionaries 
    print entries['name'],entries 

for entries in phoneList: 
    for k,v in dict.items(entries): 
     print k,v 
    print "\n" 

cnx.close() 
+0

'sql = (" INSERER DANS le répertoire (nom, téléphone, ville) VALEURS ('"+ nom +"', '"+ détail [' téléphone '] +"', '"+ detail ['city'] + "')". format (table)) 'est un accident qui attend de se produire, [maman du petit Bobby Tables dirait] (https://xkcd.com/327/). Ne jamais concaténer ou formater les valeurs en requêtes SQL. [Toujours utiliser des espaces réservés] (https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html). –

+0

Impossible de discuter avec Mom - sql = ("INSERT INTO {} (nom, téléphone, ville) VALUES ('{}', '{}', '{}')". Format (table, nom, détail [ 'téléphone'], détail ['ville'])) Howzat? – user222216

+0

"Ou format". S'il vous plaît lire sur [injection SQL] (https://en.m.wikipedia.org/wiki/SQL_injection) et l'atténuation, en particulier les requêtes paramétrées. L'astuce consiste à utiliser des espaces réservés dans la requête que le pilote * DB-API * remplit à partir des valeurs transmises. –