2015-11-03 17 views
9

PyMySQL'i bir süredir kullanıyorum ve yazım sorgularını kısaltmak için kullandığım kendi sarıcımı oluşturdum. Yine de OrderedDict ile CSV dosyaları yaratıyorum çünkü siparişi aynı tutmaya ihtiyacım var ama eğer veritabanını sorgulamak için PyMySQL kullanırsam, veritabanının geri vereceği emri alamayacağımı anlıyorum. Eğer siparişleri elden yazmak yerine sadece dökmek istedim, CSV dosyalarını kontrol etmek için biraz can sıkıcı bir durum.PyMySQL ve OrderedDict

Sorum şu ki, PyMySQL'i OrderedDict ile nasıl kullanabilirim?

import pymysql 
conn = pymysql.connect(host='localhost', user='root', passwd='', db='test') 
cursor = conn.cursor(pymysql.cursors.DictCursor) 

Ben sorgulamak yüzden, ne zaman geri bir sözlük almak olacak:

cursor.execute("""SELECT * FROM test""") 
for row in cursor: 
    pp(row) # gives me dictionary 

İstediğim şey, imleç ile attığınız zaman ben aslında almak olmam şöyle anda benim kodudur Veritabanından geldikleri sırayla sütunların OrderedDict.

şey gibi:

cursor = conn.cursor(pymysql.cursors.OrderedDict) 
+0

başka bir colu ekle mn, sorgulama sırasında kaynak satır ve sıraya göre tutar? – Busturdust

+0

@Busturdust - Sarma makinemde "query_sesli" veya bir listeden seçim alanlarına sahip bir işlev yazabilirim ve sonra sözlüğün yerine sipariş vermesi için bir jeneratör oluşturabilirdim, ancak bir çözüme ulaşabilirsem Bunu yazmadan ve bu da benim sarmalayıcımla da iyi oynayacaktır, bunu tercih ederim. – DataHerder

cevap

14

Sen cursors.DictCursorMixin kullanıp değiştirebilir onun dict_typecollections.OrderedDict (varsayılan dict olan):

aşağıda gösterildiği gibi

from collections import OrderedDict 
from pymysql.cursors import DictCursorMixin, Cursor 

class OrderedDictCursor(DictCursorMixin, Cursor): 
    dict_type = OrderedDict 

Sonra yeni imleç sınıfını kullanabilirsiniz

cursor = conn.cursor(OrderedDictCursor) 
+1

Tam olarak beklendiği gibi çalışır. Az önce PyMySQL'in github deposunda da gördüm. Hızlı cevap! Teşekkürler! – DataHerder

+0

teşekkürler. harika çalışıyor –

+0

Bu çok tatlı lanet olası! Teşekkürler –

İlgili konular