Python 如何处理SQLite3中的非确定性值?
下面您可以看到我的sqlite3数据库中的表:Python 如何处理SQLite3中的非确定性值?,python,sql,sqlite,Python,Sql,Sqlite,下面您可以看到我的sqlite3数据库中的表: 歌曲 档案 标签 播放列表 以下是表之间的关系: 一对一:歌曲和文件 多对多:歌曲和标签、歌曲和播放列表 下面您可以看到我正在使用的表查询: create_songs_table_query = """ CREATE TABLE IF NOT EXISTS songs ( song_id integer PRIMARY KEY AUTOINCREMENT,
- 歌曲
- 档案
- 标签
- 播放列表
- 一对一:歌曲和文件
- 多对多:歌曲和标签、歌曲和播放列表
create_songs_table_query = """ CREATE TABLE IF NOT EXISTS songs (
song_id integer PRIMARY KEY AUTOINCREMENT,
title text NOT NULL,
artist text NOT NULL,
added_timestamp integer NOT NULL,
file_id INTEGER NULL,
FOREIGN KEY (file_id)
REFERENCES files (file_id)
ON DELETE CASCADE
); """
create_files_table_query = """ CREATE TABLE IF NOT EXISTS files (
file_id integer PRIMARY KEY AUTOINCREMENT,
filename text NULL,
size integer NULL,
song_id INTEGER NOT NULL,
FOREIGN KEY (song_id)
REFERENCES songs (song_id)
ON DELETE CASCADE
); """
create_tags_table_query = """CREATE TABLE IF NOT EXISTS tags (
tag_id integer PRIMARY KEY AUTOINCREMENT,
tag_text text NOT NULL,
tag_timestamp integer NULL,
); """
create_songs_tags_table_query = """CREATE TABLE IF NOT EXISTS songs_tags (
song_tag_id integer PRIMARY KEY AUTOINCREMENT,
song_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
FOREIGN KEY (song_id)
REFERENCES songs (song_id)
ON DELETE CASCADE,
FOREIGN KEY (tag_id)
REFERENCES tags (tag_id)
ON DELETE CASCADE
); """
create_playlists_table_query = """CREATE TABLE IF NOT EXISTS playlists (
playlist_id integer PRIMARY KEY AUTOINCREMENT,
playlist_title text NOT NULL,
created_timestamp INTEGER NOT NULL,
updated_timestamp INTEGER NULL,
); """
create_songs_playlists__table_query = """CREATE TABLE IF NOT EXISTS songs_playlists (
song_playlist_id integer PRIMARY KEY AUTOINCREMENT,
song_id INTEGER NOT NULL,
playlist_id INTEGER NOT NULL,
FOREIGN KEY (song_id)
REFERENCES songs (song_id)
ON DELETE CASCADE,
FOREIGN KEY (playlist_id)
REFERENCES playlists (playlist_id)
ON DELETE CASCADE
); """
我正在成功地获取每个标签的歌曲总数,并按其排序:
SELECT tags.tag_id, tags.tag_text, COUNT(tags.tag_id) AS total, tags.included, tags.tag_timestamp
FROM tags
JOIN songs_tags ON tags.tag_id = songs_tags.tag_id
GROUP BY songs_tags.tag_id
ORDER BY total DESC
这是按标签排序的查询。标签\u文本:
SELECT tags.tag_id, tags.tag_text, COUNT(tags.tag_id) AS total, tags.included, tags.tag_timestamp
FROM tags
JOIN songs_tags ON tags.tag_id = songs_tags.tag_id
WHERE tags.included = 1
GROUP BY songs_tags.tag_id
ORDER BY tags.tag_text
我正在使用Python和Pycharm。Python不会返回任何记录,Pycharm会在编辑器窗口中显示以下弹出窗口:
Nondeterministic value: column tag_text is neither aggregated, nor mentioned in GROUP BY clause
尽管如此,如果从PyCharm的数据库控制台运行查询,我会得到所需的结果
这有点棘手,有什么想法吗?正确编写查询,因此
选择和分组依据列是一致的:
SELECT t.tag_id, t.tag_text, COUNT(*) AS total, t.included, t.tag_timestamp
FROM tags t JOIN
songs_tags st
ON t.tag_id = st.tag_id
WHERE t.included = 1
GROUP BY t.tag_id, t.tag_text, t.included, t.tag_timestamp
ORDER BY t.tag_text;
这还引入了表别名,因此查询更易于写入和读取。组中的其他字段是否有必要?@GiannisIordanou。如果tag\u id
在tags
中是唯一的,那么这不是严格需要的,而是一个好主意。这看起来不像是sqlite生成的错误消息,sqlite是为数不多的真正允许这种使用的数据库之一。我的Python代码中有一个错误,没有返回正确的结果。尽管如此,这个错误可能更多地与sqlite相关。