Вопрос по python, mysql – Как получить значение столбца результата SQL, используя имя столбца в Python?

38

Есть ли способ получить значение столбца результата SQL с использованием имени столбца вместо индекса столбца в Python? Я использую Python 3 с MySQL. Синтаксис, который я ищу, очень похож на конструкцию Java:

<code>Object id = rs.get("CUSTOMER_ID"); 
</code>

У меня есть таблица с большим количеством столбцов, и очень сложно постоянно составлять индекс для каждого столбца, к которому мне нужно получить доступ. Кроме того, индекс затрудняет чтение моего кода.

Спасибо!

Вы можете предоставить более подробную информацию, например, какой-то код, который вы пытаетесь, пакет Python, который вы используете. Shekhar
Для получения дополнительной информации оcursor.description, увидетьcursor.description Cheney

Ваш Ответ

7   ответов
8

# 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()
6

Теперь вы можете использовать mysql.connector для извлечения словаря, как показано здесь: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursordict.html

Вот пример на сайте MySQL:

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']
0

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
Error: User Rate Limit Exceeded Thomas
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

но вы можете попробовать что-то вроде этого:

# 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()
Error: User Rate Limit Exceeded Thomas
Error: User Rate Limit Exceeded
2

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]
Error: User Rate Limit Exceeded
73

MySQLdb модуль имеетDictCursor:

Используйте это так (взято изНаписание сценариев MySQL с использованием 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"])

edit: Согласно user1305650 это работает дляpymysql также.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Thomas
Error: User Rate Limit Exceeded Thomas
Error: User Rate Limit ExceededMySQLdbError: User Rate Limit Exceededcursor = conn.cursor(MySQLdb.cursors.DictCursor)?
Error: User Rate Limit Exceeded Thomas
1

import pymysql
db = pymysql.connect("localhost","root","root","school")
cursor=db.cursor()
sql="""select Total from student"""
l=[]
try:
    #query execution
    cursor.execute(sql)
    #fetch all rows 
    rs = cursor.fetchall()
    #iterate through rows
    for i in rs:
        #converting set to list
        k=list(i)
        #taking the first element from the list and append it to the list
        l.append(k[0])
    db.commit()
except:
    db.rollback()
db.close()
print(l)

Похожие вопросы