如何在类似SQL的语句中使用Python变量?
我正在努力寻找如何在LIKE%var%startation中执行Python变量:%s或({url})的答案 百分比符号导致我出现问题…语法错误 下面是我尝试查询的SQLite数据库的一个示例转储:如何在类似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,
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)
我决定走另一条路,放弃这种替代方法。取而代之的是我。