python3でコードを書いているうちに、MySQLに関わる部分のソースが煩雑になってしまうため、ビジネスロジックは、全て、MySQLのストアドプロシージャにまかせるってことでこんなに綺麗なソースじなります。(あくまでも個人的な主観ですが)
なお、python3でのMySQLライブラリは、MySQLdb を利用しています

MySQLストアドプロシージャについて
ここでは、ストアドの内容の説明いついては割愛しますが、こんなコードを書いています。 まあ、単純には、videoidを元にレコードを3件書き込んでいる処理です。 エラーチェックとかは、別にしていないので、あくまでも例ってことでw
CREATE PROCEDURE `sp_put_copylist`(
IN _videoid bigint,
OUT _result int(11)
)
BEGIN
SET _result = 0 ;
BEGIN
DECLARE _not_found tinyint UNSIGNED DEFAULT 0;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET _result = -99;
END;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _not_found = 1;
BEGIN
INSERT INTO
work_schema.copylist
(
TargetFile,
OriginalFile,
FileGroup,
VideoId
)
SELECT
filename || '.file.jpg' AS TargetFile,
filename || '.file.80s.jpg' AS OriginalFile,
140 AS FileGroup,
Id AS VideoId
FROM
schema.videos
WHERE
id = _videoid ;
INSERT INTO
work_schema.copylist
(
TargetFile,
OriginalFile,
FileGroup,
VideoId
)
SELECT
filename || '.file.small.jpg' AS TargetFile,
filename || '.file.80s.small.jpg' AS OriginalFile,
140 AS FileGroup,
Id AS VideoId
FROM
schema.videos
WHERE
id = _videoid ;
INSERT INTO
work_schema.copylist
(
TargetFile,
OriginalFile,
FileGroup,
VideoId
)
SELECT
filename || '.file.tiny.jpg' AS TargetFile,
filename || '.file.80s.tiny.jpg' AS OriginalFile,
140 AS FileGroup,
Id AS VideoId
FROM
schema.videos
WHERE
id = _videoid ;
SET _result = 0 ;
END ;
END;
END $$
DELIMITER ;
python3でのコード
上記のストアドプロシージャを、python3上でCALLする例です(一部抜粋) エラーチェックとかは、別にしていないので、あくまでも例ってことでw
import MySQLdb
・
・
・
# _videoidsを改行で分割
_videolist = _videoids.split()
# MySQL connect
cn = getConnection()
c = cn.cursor(MySQLdb.cursors.DictCursor)
for v in _videolist:
_videoid = v.strip()
try:
if _videoid == '':
print("skip")
break
args = (_videoid, 0)
result_args = c.callproc('work_schema.sp_put_copylist', args)
print(result_args)
except MySQLdb.Error as e:
print("MySQLdb.Error: ",e)
# finally:
# cn.commit()
# cn.close
cn.commit()
cn.close
ストアドプロシージャ
args = (_videoid, 0)
result_args = c.callproc('work_schema.sp_put_copylist', args)
単純にポイントとしてはここだけです。
callprocで呼ぶ 引数は、argsにセット(0は、MySQLのプロシージャ内でOUT属性のための固定値)