2012-04-17 12 views
28

क्या Python में कॉलम अनुक्रमणिका के बजाय कॉलम नाम का उपयोग कर SQL परिणाम कॉलम मान पुनर्प्राप्त करने का कोई तरीका है? मैं mySQL के साथ पायथन 3 का उपयोग कर रहा हूँ। वाक्य रचना मैं तलाश कर रहा हूँ काफी जावा निर्माण की तरह है:पायथन में कॉलम नाम का उपयोग कर SQL परिणाम कॉलम मान को कैसे पुनर्प्राप्त करें?

Object id = rs.get("CUSTOMER_ID"); 

मैं काफी कुछ संख्या में कॉलम के साथ एक मेज है और यह एक वास्तविक दर्द लगातार प्रत्येक स्तंभ की आवश्यकता के लिए सूचकांक बाहर काम करने के लिए है उपयोग करने के लिए। इसके अलावा सूचकांक मेरे कोड को पढ़ने के लिए कड़ी मेहनत कर रहा है।

धन्यवाद!

+0

आप: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursordict.html

यहाँ mysql साइट पर उदाहरण है:

अब तुम जैसा कि यहाँ दिखाया एक शब्दकोश पुनर्प्राप्त करने के लिए उपयोग कर सकते हैं mysql.connector आप जो कुछ कोड कोशिश कर रहे हैं, उतना अधिक विवरण प्रदान करना चाह सकते हैं, जो कि आप उपयोग कर रहे हैं पाइथन पैकेज। – Shekhar

उत्तर

52

MySQLdb मॉड्यूल है एक DictCursor:

इस तरह इसका इस्तेमाल (Writing MySQL Scripts with Python DB-API से लिया गया):

cursor = conn.cursor(MySQLdb.cursors.DictCursor) 
cursor.execute("SELECT name, category FROM animal") 
result_set = cursor.fetchall() 
for row in result_set: 
    print "%s, %s" % (row["name"], row["category"]) 

संपादित करें: उपयोगकर्ता 1305650 के अनुसार यह pymysql के लिए भी काम करता है।

+6

यह कोशिश की और यह भी काम नहीं करता है - एक त्रुटि मिली "TypeError: tuple सूचकांक पूर्णांक होना चाहिए, str नहीं" – Thomas

+2

क्या आप 'MySQLdb' मॉड्यूल का उपयोग कर रहे हैं? क्या आपने अपना कर्सर बिल्कुल इस तरह बनाया था: 'कर्सर = conn.cursor (MySQLdb.cursors.DictCursor)'? –

+0

मेरा बुरा! मैंने आपकी पोस्ट के अनुसार कर्सर नहीं बनाया है। यह अब काम करता है - मुझे बस MySQLdb.cursors.DictCursor को pymysql.cursors.DictCursor में बदलने की आवश्यकता है क्योंकि मैं pymysql का उपयोग करता हूं। धन्यवाद! – Thomas

-1

बेशक वहाँ है। अजगर 2.7.2 + ... में

import MySQLdb as mdb 
con = mdb.connect('localhost', 'user', 'password', 'db'); 
cur = con.cursor() 
cur.execute('SELECT Foo, Bar FROM Table') 
for i in range(int(cur.numrows)): 
    foo, bar = cur.fetchone() 
    print 'foo = %s' % foo 
    print 'bar = %s' % bar 
+1

-1। क्षमा करें, गंभीरता से संदेह है कि ओपी क्या मतलब है। –

+0

आपको क्या लगता है कि वह करने की कोशिश कर रहा है? कॉलम नाम से मानों का चयन करें और उन्हें चर के लिए असाइन करें बहुत सीधे आगे लगता है। – TaoJoannes

+0

ऐसा लगता है कि वह एक समाधान चाहता है जो स्तंभ आदेश से स्वतंत्र है। –

0

आप कई विवरण हमें नहीं दिया है, लेकिन आप कुछ इस तरह की कोशिश कर सकते:

# conn is an ODBC connection to the DB 
dbCursor = conn.cursor() 
sql = ('select field1, field2 from table') 
dbCursor = conn.cursor() 
dbCursor.execute(sql) 
for row in dbCursor: 
    # Now you should be able to access the fields as properties of "row" 
    myVar1 = row.field1 
    myVar2 = row.field2 
conn.close() 
+0

क्षमा करें, यह काम नहीं करता है। हालांकि मुझे यकीन है कि ऐसा इसलिए है क्योंकि MySQL कार्यान्वयन या केवल डीबी-एपीआई-2.0 समर्थन की कमी है। – Thomas

+0

क्या आपने pyodbc का उपयोग करने की कोशिश की है? यह सामान्य होना चाहिए और प्रत्येक डेटाबेस के लिए एक ही इंटरफ़ेस का समर्थन करना चाहिए। – Diego

-1

अजगर 2,7

import pymysql 

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='password', db='sakila') 

cur = conn.cursor() 

n = cur.execute('select * from actor') 
c = cur.fetchall() 

for i in c: 
    print i[1] 
+0

ओपी विशेषता द्वारा इंडेक्स नहीं चाहता है – levi

2

इस पोस्ट पुरानी है लेकिन खोज के माध्यम से सामने आती हैं।

cnx = mysql.connector.connect(database='world') 
cursor = cnx.cursor(dictionary=True) 
cursor.execute("SELECT * FROM country WHERE Continent = 'Europe'") 

print("Countries in Europe:") 
for row in cursor: 
    print("* {Name}".format(Name=row['Name'] 
1

आयात pymysql

# Open database connection 
db = pymysql.connect("localhost","root","","gkdemo1") 

# prepare a cursor object using cursor() method 
cursor = db.cursor() 

# execute SQL query using execute() method. 
cursor.execute("SELECT * from user") 

# Get the fields name (only once!) 
field_name = [field[0] for field in cursor.description] 

# Fetch a single row using fetchone() method. 
values = cursor.fetchone() 

# create the row dictionary to be able to call row['login'] 
**row = dict(zip(field_name, values))** 

# print the dictionary 
print(row) 

# print specific field 
print(**row['login']**) 

# print all field 
for key in row: 
    print(**key," = ",row[key]**) 

# close database connection 
db.close() 
संबंधित मुद्दे