2016-06-29 53 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並獲取每行的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

更新爲使用'select'方法而不是'text'。查看[sqlalchemy文檔](http://docs.sqlalchemy.org/en/latest/core/tutorial.html#selecting)以獲取更多信息 –

+0

非常感謝! – ThP