小编afi*_*ert的帖子

在MySQL脚本中设置当前数据库

我有一个MySQL脚本文件,需要在大约30个数据库上运行.这是一个片段:

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `availability` ...

ALTER TABLE <whatever_database>.`tblusers` ADD COLUMN `reliability` INTEGER ...
Run Code Online (Sandbox Code Playgroud)

这个脚本中还有很多行,我想在当前数据库的循环中自动化它以进行更新.我已经使用游标获得了列表和循环,但这里是我遇到麻烦的地方:

当我在游标中的特定数据库上时,该数据库名称在变量中.我不能只说ALTER TABLE curschema.tblusers因为脚本抱怨没有名为curschema的数据库(包含我想要运行操作的数据库名称的变量的名称).我已经能够通过使用参数创建和执行语句来解决这个问题:

SET @curschema = curschema;
SET @query = NULL;
SET @email = emailAddress;
SET @pass = pass;
SET @statement = CONCAT('SELECT userid INTO @query FROM ', @curschema, '.tbluser 
PREPARE stmt FROM @statement;
EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)

问题是,设置可执行字符串(如上所述)将成为一项非常繁琐的任务,我必须运行几十行代码.我希望有一种方法可以设置当前数据库的操作,然后只是重置每个循环传递的数据库,这样我的通用语句可能会运行:

(我的循环开始)

SET DATABASE database0 - (通过数据库29)

- 运行带有database0 .... 29的语句与上述命令有关

ALTER TABLE `tblusers` ADD COLUMN `availability` TINYINT(1) UNSIGNED ...

ALTER TABLE `tblusers` ADD COLUMN …
Run Code Online (Sandbox Code Playgroud)

mysql database

13
推荐指数
1
解决办法
3万
查看次数

使用 boto3 翻页匹配特定文件名的 S3 对象

我有一个带有前缀(或“文件夹”)的 AWS S3 存储桶,名为/photos. 那“包含”一堆图像文件,甚至更少的EVENT.json文件。一个简单的表示可能如下所示:

  • 我的真棒事件桶
    • 相片
      • 图片1.jpg
      • 图片2.jpg
      • 1_EVENT.json
      • 图片3.jpg
      • 2_EVENT.json
      • ...

这些EVENT.json文件有一个对象,该对象包含对任意数量图像文件的路径引用,这些文件将图像分组到特定事件中。使用上面的示例,image1.jpg 和 image2.jpg 可能出现在 1_EVENT.json 中,而 image3.jpg 可能属于 2_EVENT.json。

随着存储桶变大,我对分页结果感兴趣。我只想在需要时从 S3 请求一个页面。我遇到的问题是我想通过包含“EVENT”一词的键专门进行分页。我发现如果不带回所有对象然后过滤或迭代结果,这很难完成。

使用S3 Paginator,我可以让分页工作。假设我的PageSizeMaxItems设置为 6,这就是我可能会在第一页返回的内容:

/photos/
/photos/image1.jpg
/photos/image2.jpg
/photos/1_EVENT.json
/photos/image3.jpg
/photos/2_EVENT.json
Run Code Online (Sandbox Code Playgroud)

S3的扁平结构意味着它根据Prefix对bucket中的所有对象进行分页,并根据分页参数进行限制和分页。这意味着我可以轻松获得多个 EVENT.json 文件,或者根本没有,具体取决于页面。

所以我正在寻找更多类似的东西:

/photos/1_EVENT.json
/photos/2_EVENT.json
/photos/3_EVENT.json
/photos/4_EVENT.json
/photos/5_EVENT.json
/photos/6_EVENT.json
Run Code Online (Sandbox Code Playgroud)

无需首先请求所有对象,然后以某种方式对结果集进行切片;这正是我目前正在做的事情:

/photos/
/photos/image1.jpg
/photos/image2.jpg
/photos/1_EVENT.json
/photos/image3.jpg
/photos/2_EVENT.json
Run Code Online (Sandbox Code Playgroud)

上面的内容非常昂贵,没有分页,但它确实给了我一个包含我的“事件”搜索字符串的所有文件的列表。

我特别希望的页面结果只有通过S3使用boto3,而无需返回和过滤所有对象的每个请求的开销EVENT.json对象。那可能吗?

编辑:我已经将请求范围缩小到带有photos/前缀的对象。这是因为我的存储桶中还有其他“文件夹”也可能包含 EVENT 文件。这阻止了我使用 EVENT 或 EVENT.json 作为我的前缀,因为响应可能会被其他文件夹中的文件污染。

python paging amazon-s3 amazon-web-services boto3

4
推荐指数
1
解决办法
7362
查看次数

使用Boto3按键列表下载S3对象

我有一个我从缓存中检索的密钥列表,我想从S3下载相关的对象(文件),而不必为每个密钥发出请求.

假设我有以下几个键:

key_array = [
    '20160901_0750_7c05da39_INCIDENT_MANIFEST.json',
    '20161207_230312_ZX1G222ZS3_INCIDENT_MANIFEST.json',
    '20161211_131407_ZX1G222ZS3_INCIDENT_MANIFEST.json',
    '20161211_145342_ZX1G222ZS3_INCIDENT_MANIFEST.json',
    '20161211_170600_FA68T0303607_INCIDENT_MANIFEST.json'
]
Run Code Online (Sandbox Code Playgroud)

我试图在另一个SO问题上做类似于这个答案的事情,但是修改如下:

import boto3

s3 = boto3.resource('s3')

incidents = s3.Bucket(my_incident_bucket).objects(key_array)

for incident in incidents:
    # Do fun stuff with the incident body
    incident_body = incident['Body'].read().decode('utf-8')
Run Code Online (Sandbox Code Playgroud)

我的最终目标是,我希望避免单独为列表中的每个键点击AWS API.我还想避免不得不拉下整个桶并过滤/迭代完整的结果.

python amazon-s3 amazon-web-services boto3

4
推荐指数
1
解决办法
2788
查看次数