2016-06-29 4 views
0

テーブルのどの行にif exist == True :という名前の行が印刷されるようにコードに追加する必要がありますか?また、テーブルの位置を示すように、レコードのIDを返すこともできます。私はそれが必要ではないと思うので、私はデータベースコードを含んでいませんでした。私の悪い説明に申し訳ありません。英語は母国語ではありません。Sqlalchemy:レコードが格納されている行を検索

engine = create_engine('sqlite:///sqlalchemy_login.db') 
Base.metadata.bind = engine 

DBSession = sessionmaker(bind=engine) 
session = DBSession() 



username_attempt = raw_input('Enter username:') 
username_attempt = unicode(username_attempt) 

exist = session.query(exists().where(user.username == username_attempt)).scalar() 


while exist == False : 
    print 'Incorrect username' 
    username_attempt = raw_input('Enter username:') 
    username_attempt = unicode(username_attempt) 
    exist = session.query(exists().where(user.username == username_attempt)).scalar() 

答えて

1

SQLAlchemyのはselect文のクエリをサポートしています。

def _get_users(attempt): 
    stmt = sqlalchemy.select([users]).where(users.c.username == attempt) 
    return [dict(r) for r in sqlalchemy.execute(stmt)] 

def _get_attempt(): 
    username_attempt = raw_input('Enter username:') 
    return unicode(username_attempt) 

attempt = _get_attempt() 
recs = _get_users(attempt) 

while not recs: 
    print 'Incorrect username' 
    attempt = _get_attempt() 
    recs = _get_users(attempt) 
print recs 

RECSが空ではない(と有効なユーザ名が与えられている)、RECSは、テーブル内の行を表す辞書のリストが含まれます:だから私のような何かをするだろう。 recsをトラバースし、各行のidを取得できます。

注:usersテーブルを定義する必要があります。

db_metadata = sqlalchemy.MetaData() 
users = sqlalchemy.Table('users', db_metadata, 
    Column('id', sqlalchemy.Integer, primary_key=True), 
    Column('username', sqlalchemy.Integer, primary_key=True), 
    # add rest of your table schema here... 
) 
+0

私はので、私はSQLインジェクションから安全だ、私のコードでは、生のSQLを置くことを避けるためにしたいと思います。 – ThP

+1

は、 'text'の代わりに' select'メソッドを使うように更新されました。詳細については、[sqlalchemy docs](http://docs.sqlalchemy.org/ja/latest/core/tutorial.html#selecting)を参照してください。 –

+0

ありがとうございました! – ThP

関連する問題