Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
如何在类似SQL的语句中使用Python变量?_Python_Sql_Variables - Fatal编程技术网

如何在类似SQL的语句中使用Python变量?

如何在类似SQL的语句中使用Python变量?,python,sql,variables,Python,Sql,Variables,我正在努力寻找如何在LIKE%var%startation中执行Python变量:%s或({url})的答案 百分比符号导致我出现问题…语法错误 下面是我尝试查询的SQLite数据库的一个示例转储: PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "user_cats" ( `category` TEXT, `uploader` TEXT, `folder` TEXT,

我正在努力寻找如何在LIKE%var%startation中执行Python变量:%s或({url})的答案

百分比符号导致我出现问题…语法错误

下面是我尝试查询的SQLite数据库的一个示例转储:

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "user_cats" (
    `category`  TEXT,
    `uploader`  TEXT,
    `folder`    TEXT,
    `playlists` TEXT,
    `playlist_image`    TEXT,
    `save_directory`    TEXT
);
INSERT INTO user_cats VALUES('Comics','ComicsExplained','DC Rebirth','[''New to DC Comics? Start here!'']',NULL,'%USERPROFILE%\Videos\Online Videos\Comics\ComicsExplained\');
INSERT INTO user_cats VALUES('Comics','Comicstorian',NULL,NULL,NULL,NULL);
INSERT INTO user_cats VALUES('Video Games','IGN','Daily Fix','[''Daily Fix'']',NULL,'%USERPROFILE%\Videos\Online Videos\Video Games\IGN\Daily Fix\');
INSERT INTO user_cats VALUES('Comics','Marvel Entertainment','Marvel Top 10','[''Marvel Top 10'']',NULL,'%USERPROFILE%\Videos\Online Videos\Comics\Marvel Entertainment\');
INSERT INTO user_cats VALUES('','ScrewAttack!',NULL,NULL,NULL,NULL);
COMMIT;
我想做的是有一个公式(我可能会把它变成一个对象方法),它使用youtube dl来检索上传者和播放列表标题

然后使用数据库将文件路由到不同的保存位置,并可能保存其他信息。 但是,我对SELECT语句和百分号有问题。错误取决于我如何编辑语句-各种语法或意外字符等(键入我遇到的每个错误可能没有帮助-这是变量赋值的问题-而不是语句)

如果我使用简单的

SELECT save_directory FROM user_cats WHERE uploader='IGN' AND playlists LIKE '%ail%';
答对了,有用

def save_dir (uploader, playlist):
    query = "SELECT save_directory FROM user_cats WHERE uploader=({ul}) AND playlists LIKE '%%({pl})%%'.format(ul = uploader, pl = playlist)".format(ul=uploader, pl=playlist))

    c.execute(query)
    all_rows = c.fetchall()
    print('1):', all_rows)

您可以通过以下方式设置格式:

>>> uploader, playlist = 'someUploader', 'somePlaylist'
>>> query ='SELECT save_directory FROM user_cats WHERE uploader={0:s} AND playlists LIKE %{1:s}'
>>> query.format(uploader, playlist)
'SELECT save_directory FROM user_cats WHERE uploader=someUploader AND playlists LIKE %somePlaylist'
>>> query ='SELECT save_directory FROM user_cats WHERE uploader=%(ul)s AND playlists LIKE %(pl)s'
>>> query % {'ul': 'someUploader', 'pl': '%somePlaylist%'}
'SELECT save_directory FROM user_cats WHERE uploader=someUploader AND playlists LIKE %somePlaylist%'
或者甚至是这样:

>>> uploader, playlist = 'someUploader', 'somePlaylist'
>>> query ='SELECT save_directory FROM user_cats WHERE uploader={0:s} AND playlists LIKE %{1:s}'
>>> query.format(uploader, playlist)
'SELECT save_directory FROM user_cats WHERE uploader=someUploader AND playlists LIKE %somePlaylist'
>>> query ='SELECT save_directory FROM user_cats WHERE uploader=%(ul)s AND playlists LIKE %(pl)s'
>>> query % {'ul': 'someUploader', 'pl': '%somePlaylist%'}
'SELECT save_directory FROM user_cats WHERE uploader=someUploader AND playlists LIKE %somePlaylist%'

这并不漂亮,但我最终通过将字符串添加到一起而不是尝试替换值来实现查询

def save_dir(上传器、播放列表):

save_dir('IGN','Daily Fix')

而输出

1): [('%USERPROFILE%\\Videos\\Online Videos\\Video Games\\IGN\\Daily Fix',)]
[Finished in 0.116s]

最后-\uuuuuuu-

您需要使用双倍的百分号。
从用户猫咪那里选择*播放列表,如“%%s%”,您的字符串“
。我仍然会收到一个错误…如果我在使用%%的地方使用此选项,
查询=”从用户猫咪那里选择保存目录,上传器=“%%s”和播放列表,如“%%%s%”(上传器,播放列表)
问题是SQL使用%var%进行类似的操作,python使用%s进行替换。因此,LIKE语句变成:
%%%s%
。这没有什么帮助,但我很感激@Mauricemeyer您可能想编辑您的问题,原始SQL查询是什么样子的。这样我们就可以看到您想要实现什么,您可以谈论%signs,但我在您的代码中没有看到任何内容。顺便说一句,您使用的是哪个数据库?@MauriceMeyer我使用的是SQLite。我将很快添加一些问题编辑。包含有关我试图检索的数据库信息的详细信息。公式应包含参数(上载器、播放列表)然后匹配uploader和playlists columnsHm,这两种格式的错误都是一样的:
sqlite3.OperationalError:near“%”:语法错误
`query=
从user_cats中选择save_目录,其中uploader=({0:s})和播放列表,如%({1:s})%'query.format(uploader,playlist)
我决定走另一条路,放弃这种替代方法。取而代之的是我。