我的 python 烧瓶导致 API 结果(可能是我的列表的原因)和我的数据库出错



我使用flask,一个api和SQLite的SQLAlchemy。 我从蟒蛇和烧瓶开始,我对列表有问题。

我的应用程序工作,现在我尝试新闻功能。 我需要知道我的 json 信息是否在我的数据库中。 函数 find_current_project_team() 在 API 中获取信息。

def find_current_project_team():
headers = {"Authorization" : "bearer "+session['token_info']['access_token']}
user = requests.get("https://my.api.com/users/xxxx/", headers = headers)
user = user.json()
ids = [x['id'] for x in user]
return(ids)

我使用ids = [x['id'] for x in user](相同):

ids = []
for x in user:
ids.append(x['id'])

获取ids信息。ID 信息是 API 中的 ID,我需要它。 我有这个结果:

[2766233, 2766237, 2766256]

我想在我的数据库中逐个检查值。 如果值不存在,我想添加它。 如果一个或所有值都存在,我想检查并返回"不可能对不起,ids 已经存在"。

为此,我编写了一个新函数:

def test():
test = find_current_project_team()
for find_team in test:
find_team_db = User.query.filter_by(
login=session['login'], project_session=test
).first()

我完全不知道如何一一检查值。

如果有人可以帮助我,谢谢你:)

实际上我有这个错误:

sqlalchemy.exc.InterfaceError: (InterfaceError) Error binding 参数 1 - 可能不支持的类型。'选择 user.id 作为user_id, user.login 作为user_login,user.project_session AS user_project_session 从用户 其中用户登录 = ?和 user.project_session = ? 限制?抵消?('my_tab_login', [2766233, 2766237, 2766256], 1, 0)

在我看来,您将列表直接传递到数据库查询中:

def test():
test = find_current_project_team()
for find_team in test:
find_team_db = User.query.filter_by(login=session['login'], project_session=test).first()

相反,您应该只传入 ID:

def test():
test = find_current_project_team()
for find_team in test:
find_team_db = User.query.filter_by(login=session['login'], project_session=find_team).first()

除此之外,我认为您可以使用命名约定做得更好:

def test():
project_teams = find_current_project_team()
for project_team in project_teams:
project_team_result = User.query.filter_by(login=session['login'], project_session=project_team).first()

所有作品感谢

我的代码 :

project_teams = find_current_project_team()
for project_team in project_teams:
project_team_result = User.query.filter_by(project_session=project_team).first()
print(project_team_result)
if project_team_result is not None:
print("not none")
else:
project_team_result = User(login=session['login'], project_session=project_team)
db.session.add(project_team_result)
db.session.commit()

最新更新