Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从bool为true的副本中获取一个,如果没有,则返回_Python_Sql_Sqlalchemy - Fatal编程技术网

Python 从bool为true的副本中获取一个,如果没有,则返回

Python 从bool为true的副本中获取一个,如果没有,则返回,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我有以下数据: id | name | some_value | active -------------------------------- 1 | test | 1234 | false 2 | toast | qwert | false 3 | test | 4321 | true 4 | toast | trewq | false 我想得到一个每个名字都是“唯一”的列表。另外,我想得到那些活动的为真,如果没有找到真值,则返回数

我有以下数据:

id | name  | some_value | active
--------------------------------
 1 | test  | 1234       | false
 2 | toast | qwert      | false
 3 | test  | 4321       | true
 4 | toast | trewq      | false
我想得到一个每个名字都是“唯一”的列表。另外,我想得到那些
活动的
为真,如果没有找到真值,则返回数据库中的最后一项

目前我有以下几点:

#/usr/bin/env蟒蛇3
进口稀土
从sqlalchemy导入创建\引擎、列、整数、字符串、布尔值和\或_
从sqlalchemy.orm导入sessionmaker
从sqlalchemy.sql导入函数
从sqlalchemy.ext.declarative导入为_declarative,声明为_attr

PATTERN=re.compile(r)(?不访问数据库这有点难解决,但取消布局过程可能如下所示:

样本数据:

import pandas as pd
df = pd.DataFrame({'id': {0: 1, 1: 2, 2: 3, 3: 4},
 'name': {0: 'test', 1: 'toast', 2: 'test', 3: 'toast'},
 'some_value': {0: '1234', 1: 'qwert', 2: '4321', 3: 'trewq'},
 'active': {0: False, 1: False, 2: True, 3: False}})
df = df.groupby(['name', 'active'], as_index=False)[['id', 'some_value']].last()
df = df.sort_values(by=['active'], ascending=False)
df = df.drop_duplicates(subset=['name'])
df = df.set_index('id')

#      name  active some_value
# id                          
# 3    test    True       4321
# 4   toast   False      trewq
代码:

import pandas as pd
df = pd.DataFrame({'id': {0: 1, 1: 2, 2: 3, 3: 4},
 'name': {0: 'test', 1: 'toast', 2: 'test', 3: 'toast'},
 'some_value': {0: '1234', 1: 'qwert', 2: '4321', 3: 'trewq'},
 'active': {0: False, 1: False, 2: True, 3: False}})
df = df.groupby(['name', 'active'], as_index=False)[['id', 'some_value']].last()
df = df.sort_values(by=['active'], ascending=False)
df = df.drop_duplicates(subset=['name'])
df = df.set_index('id')

#      name  active some_value
# id                          
# 3    test    True       4321
# 4   toast   False      trewq

如果无法访问数据库,则很难解决此问题,但取消支付过程可能如下所示:

样本数据:

import pandas as pd
df = pd.DataFrame({'id': {0: 1, 1: 2, 2: 3, 3: 4},
 'name': {0: 'test', 1: 'toast', 2: 'test', 3: 'toast'},
 'some_value': {0: '1234', 1: 'qwert', 2: '4321', 3: 'trewq'},
 'active': {0: False, 1: False, 2: True, 3: False}})
df = df.groupby(['name', 'active'], as_index=False)[['id', 'some_value']].last()
df = df.sort_values(by=['active'], ascending=False)
df = df.drop_duplicates(subset=['name'])
df = df.set_index('id')

#      name  active some_value
# id                          
# 3    test    True       4321
# 4   toast   False      trewq
代码:

import pandas as pd
df = pd.DataFrame({'id': {0: 1, 1: 2, 2: 3, 3: 4},
 'name': {0: 'test', 1: 'toast', 2: 'test', 3: 'toast'},
 'some_value': {0: '1234', 1: 'qwert', 2: '4321', 3: 'trewq'},
 'active': {0: False, 1: False, 2: True, 3: False}})
df = df.groupby(['name', 'active'], as_index=False)[['id', 'some_value']].last()
df = df.sort_values(by=['active'], ascending=False)
df = df.drop_duplicates(subset=['name'])
df = df.set_index('id')

#      name  active some_value
# id                          
# 3    test    True       4321
# 4   toast   False      trewq

我认为排序/排名可以解决这个问题:

expr = func.rank().over(partition_by=self.model.name, order_by=[self.model.active.desc(), self.model.id.desc()]).label("therank")
subq = db.query(self.model.id, expr).subquery("subq")
q = db.query(self.model).join(subq, self.model.id == subq.c.id).filter(subq.c.therank == 1)
return q.all()

我认为排序/排名可以解决这个问题:

expr = func.rank().over(partition_by=self.model.name, order_by=[self.model.active.desc(), self.model.id.desc()]).label("therank")
subq = db.query(self.model.id, expr).subquery("subq")
q = db.query(self.model).join(subq, self.model.id == subq.c.id).filter(subq.c.therank == 1)
return q.all()

我把我的问题更新为完全可执行我把我的问题更新为完全可执行谢谢,我来看看这个谢谢,我来看看这个