2009-07-28 25 views
9

üzerinde faaliyet gösteren sütun adları ve ilgili sütun değerleri tükürmek ve onlar gösterilmez böylece muhtemelen bazı sütunları filtrelemek. Bu (elbette ilk bağlantıdan sonra) ben teşebbüs nedirSQLAlchemy: Ben nispeten basit bir şey yapmaya çalışıyorum sonuçları

:

metadata = MetaData(engine) 

users_table = Table('fusion_users', metadata, autoload=True) 

s = users_table.select(users_table.c.user_name == username) 
results = s.execute() 

if results.rowcount != 1: 
    return 'Sorry, user not found.' 
else: 
    for result in results: 
    for x, y in result.items() 
     print x, y 

Ben sqlalchemy (sürüm 5) API baktım ama oldukça karışıktı. 'sonuç' içindeki 'sonuç' bir RowProxy olduğunu, ancak .items() çağrısı için doğru nesneyi döndürdüğünü sanmıyorum.

benim tablo yapısı böyledir diyelim:

i süzmek ve göstermek için sütun adlarını belirtmek istediğiniz
user_id user_name user_password user_country 
0   john   a9fu93f39uf  usa 

(i besbelli user_password göstermek istemiyorum) - bunu nasıl başarabilirler?

cevap

10

Bir yineleyici olarak anında results kullanabilirsiniz. RowProxy gerçekten bir şey değildir çünkü

from sqlalchemy.sql import select 

s = select([users_table.c.user_name, users_table.c.user_country], users_table.c.user_name == username) 

for user_name, user_country in s.execute(): 
    print user_name, user_country 

değerlerine ek sütun adları en iyi olmalıdır sorunuzu yapmış şekilde yazdırmak için: belirli sütunları seçme

results = s.execute() 

for row in results: 
    print row 

şu şekilde yapılır Sıralı bir sözlükten daha fazlası.

IMO sqlalchemy için API belgeleri nasıl kullanılacağını öğrenmek için gerçekten yararlı değildir. SQL Expression Language Tutorial'u okumanızı öneririm. SqlAlchemy ile temel sorgulama hakkında en önemli bilgileri içerir.

+0

İlk pasaj, başlangıçta geldiğim ve herşeyi iade ettiğim şeydir. İkinci snippet için "ValueError: paketlenecek çok fazla değer" alıyorum - hrm –

+0

Ah, fazladan sütun belirtmedim. Tekrar deneyelim. –

+0

TypeError: select() en fazla 2 argüman alır (4 verilen) >> s = users_table.select (kullananlar_table.c.user_name, users_table.c.user_location, users_table.c.user_name == kullanıcı adı) –

14

bir SQLAlchemy RowProxy nesne dict benzeri yöntemler vardır - .items() tüm isim/değer çiftleri, .keys() sadece isimleri (örneğin, daha sonra bir pompa çıkışı hattı olarak gösterilecek mütekabil değerler için .values() kullanmak ya da her bir kullanımı için elde etmek için RowProxy nesnesine, vb.'ye endekslenecek anahtar - bu nedenle, düz bir dict yerine "akıllı bir nesne" olmak sizi gereksiz yere rahatsız etmemelidir.

İlgili konular