Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 如何处理SQLite3中的非确定性值?_Python_Sql_Sqlite - Fatal编程技术网

Python 如何处理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,

下面您可以看到我的sqlite3数据库中的表:

  • 歌曲
  • 档案
  • 标签
  • 播放列表
以下是表之间的关系:

  • 一对一:歌曲和文件
  • 多对多:歌曲和标签、歌曲和播放列表
下面您可以看到我正在使用的表查询:

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相关。