小编Jak*_*way的帖子

SQLAlchemy:过滤多对一关系,其中一个对象具有包含特定值的列表

我有一些像这样的表:

class Genre(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), index=True)
    artist_id = db.Column(db.Integer, db.ForeignKey('artist.id'))

class Song(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), index=True)
    artist = db.relationship('Artist', uselist=False)
    artist_id = db.Column(db.Integer, db.ForeignKey('artist.id'))

class Artist(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), index=True)
    genres = db.relationship('Genre')
    songs = db.relationship('Song')
Run Code Online (Sandbox Code Playgroud)

所以基本上,歌曲有一个艺术家.每位艺术家都可以拥有多种类型.

我试图通过任何艺术家获得所有歌曲,其中的类型列表包含一个特定名称的类型.我做了一些研究,我发现了一些非常接近的东西:

Song.query.filter(Artist.genres.any(Genre.name.in_([genre_name_im_looking_for])))
Run Code Online (Sandbox Code Playgroud)

这将是一种工作,但并非适用于所有情况.例如,上述声明还将返回所有拥有流派'独立摇滚'的艺术家的歌曲.如何指定我不希望类型名称位于值列表中,而是指定为特定值?

Song.query.filter(Artist.genres.any(Genre.name='rock'))
Run Code Online (Sandbox Code Playgroud)

也不可能,因为它是一个关键字表达式.

有任何想法吗?

python sqlalchemy flask-sqlalchemy

3
推荐指数
1
解决办法
5274
查看次数

Qsort 没有按照我期望的方式使用 void 指针工作

所以我尝试使用 qsort 对 C 中的 void 指针的通用数组列表进行排序。

当我实际使用数组列表时,我正在存储Queue指针。

我很确定我打电话是qsort正确的

qsort(al->list, al->size, sizeof(void *), al->cf );
Run Code Online (Sandbox Code Playgroud)

在我的比较器函数中,我想这样做

int compareQCtgry(const void * queueA, const void * queueB)
{
    Queue * q1 = (Queue *) queueA;
    Queue * q2 = (Queue *) queueB;
    return strcmp(q1->category, q2->category);
}
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了段错误。

但是当我将其更改为

int compareQCtgry(const void * queueA, const void * queueB)
{
    Queue * q1 = *(Queue **) queueA;
    Queue * q2 = *(Queue **) queueB;
    return strcmp(q1->category, q2->category);
}
Run Code Online (Sandbox Code Playgroud)

它有效,但对我来说毫无意义。为什么将 void …

c pointers void-pointers

2
推荐指数
1
解决办法
332
查看次数