2017-03-24 17 views
-2

Ich habe diese Abfrage in einem python Programm:Wie bekomme ich Spalten aus einer Abfrage in Python?

Und ich soll ein mehrdimensionales Array (wenn es möglich ist) oder vier Arrays aus dieser Abfrage für jede Spalte aus der Abfrage erstellen.

Können Sie eine elegante Lösung vorschlagen?

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

Lassen Sie uns sehen, was Sie im Code haben, damit wir Ihnen helfen können, das Ergebnis zu erhalten. – karthikr

+0

Eine Abfrage von was genau? –

+0

sieht aus wie [Pandas] (http://pandas.pydata.org/) ist, was Sie brauchen – Copperfield

Antwort

-1

Nicht elegant, aber es kann die mysteriöse Python-Connector Cursor Klasse entwirren helfen und überträgt die Liste von Tupeln (siehe Copperfield Kommentar) mit den Daten aus der Abfrage in eine Liste (Geräteliste) von Wörterbuch (Einträge) mit Details zu jedem Eintrag in der Datenbank, mit denen in Ihrem Python-Skript einfacher zu arbeiten ist:

# 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 = (" INSERT INTO Telefonbuch (Name, Telefon, Stadt) VALUES ('"+ Name +' ','" + Detail ['Telefon'] + '', '"+ detail ['city'] + '') ". format (table))' ist ein Unfall, der darauf wartet zu passieren, [Mama von kleinen Bobby Tables würde sagen] (https://xkcd.com/327/). Verketten oder formatieren Sie Werte niemals mit SQL-Abfragen. [Platzhalter immer verwenden] (https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html). –

+0

Kann nicht mit Mom argumentieren - sql = ("INSERT INTO {} (Name, Telefon, Stadt) VALUES ('{}', '{}', '{}')". Format (Tabelle, Name, Detail [ 'Telefon'], Detail ['Stadt'])) Howzat? – user222216

+0

"Oder Format". Bitte lesen Sie [SQL injection] (https://en.m.wikipedia.org/wiki/SQL_injection) und Minderung, insbesondere parametrisierte Abfragen. Der Trick besteht darin, Platzhalter in der Abfrage zu verwenden, die der * DB-API-Treiber * aus übergebenen Werten ausfüllt. –

Verwandte Themen