Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
Mysql 如何将唯一数据从sql server分割到两台不同的计算机_Mysql_Python 3.x_Pymysql - Fatal编程技术网

Mysql 如何将唯一数据从sql server分割到两台不同的计算机

Mysql 如何将唯一数据从sql server分割到两台不同的计算机,mysql,python-3.x,pymysql,Mysql,Python 3.x,Pymysql,我希望使用多台计算机来运行python脚本。我想从mysql向运行脚本的每台计算机提供唯一的数据。我有一个半工作的解决方案,但问题是当两个脚本同时运行它时,在任何一个脚本更新status列以进行处理之前,它将选择相同的数据 我试过: 从状态为空的表中选择*进行更新 但这似乎只是将我的第二个连接完全锁定在数据库之外,而不允许它获取下面的数据进行处理 我还尝试了下面的代码,这是有效的,但只有在两个脚本不尝试同时访问数据库的情况下 视频=[] ids=[] c、 执行“从状态为NULL LIMIT 1

我希望使用多台计算机来运行python脚本。我想从mysql向运行脚本的每台计算机提供唯一的数据。我有一个半工作的解决方案,但问题是当两个脚本同时运行它时,在任何一个脚本更新status列以进行处理之前,它将选择相同的数据

我试过:

从状态为空的表中选择*进行更新 但这似乎只是将我的第二个连接完全锁定在数据库之外,而不允许它获取下面的数据进行处理

我还尝试了下面的代码,这是有效的,但只有在两个脚本不尝试同时访问数据库的情况下

视频=[] ids=[] c、 执行“从状态为NULL LIMIT 100的视频中选择视频\u id、url;” data=c.fetchall 对于数据中的行: 第[1]行,第[0]行 ids.appendrow[0] c、 executemany'UPDATE videos SET status=正在处理,其中视频\u id=%s;',身份证 db.commit 我希望每台计算机都能获取独特的数据集进行处理。脚本1抓取1-100,脚本2抓取101-200,脚本3抓取201-300,等等

谢谢你的帮助!祝你今天愉快

这是我的建议

您可以使用mysql,但需要将查询更新为:

c.execute('lock tables videos; UPDATE videos SET status="processing" WHERE video_id in (select t1.video_id from (select video_id, row_number() over (order by video_id) as rn from videos where coalesce(status, '') = '') as t1 where rn <= 100); unlock tables;')
此解决方案仅适用于mysql版本8.0以上


您不需要在这个问题上使用for循环。

您好,我尝试过使用它,但收到错误消息:错误1235 42000:此版本的MySQL尚不支持“LIMIT&IN/ALL/ANY/SOME子查询”。我还必须删除锁表视频;并解锁表,因为它给了我一个语法错误。我想我必须将它们作为3个独立的执行来运行?这能给我提供我想要的数据吗?我需要URL和视频id,这似乎只是更新而没有返回任何数据。更新后,忘记了右括号,请重试错误1235 42000:此版本的MySQL尚不支持“LIMIT&IN/ALL/any/SOME subquery”@Canna,您使用的MySQL版本是什么?