2016-06-29 54 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