Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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
Python 如何将Amazon S3 bucket中的URL存储在Django sqlite db中以显示&;评论_Python_Django_Amazon S3_Boto - Fatal编程技术网

Python 如何将Amazon S3 bucket中的URL存储在Django sqlite db中以显示&;评论

Python 如何将Amazon S3 bucket中的URL存储在Django sqlite db中以显示&;评论,python,django,amazon-s3,boto,Python,Django,Amazon S3,Boto,我已经使用Django好几天了&从一个有Django评论的网站上建立了一个基本的博客 我有一个完全独立的python脚本,可以生成屏幕截图并上传到AmazonS3,现在我想让我的django应用程序显示bucket中的所有图像,并对图像使用评论系统。最好是将URL存储在我的sqlite数据库中,目前我已经对其进行了硬编码,以显示数据库中的所有图像,并对这些图像启用了注释 我的模型: (这是否需要django注释的外键,或者这只是django魔力的一部分?!) 我的桶结构: https://s3-

我已经使用Django好几天了&从一个有Django评论的网站上建立了一个基本的博客

我有一个完全独立的python脚本,可以生成屏幕截图并上传到AmazonS3,现在我想让我的django应用程序显示bucket中的所有图像,并对图像使用评论系统。最好是将URL存储在我的sqlite数据库中,目前我已经对其进行了硬编码,以显示数据库中的所有图像,并对这些图像启用了注释

我的模型:

(这是否需要django注释的外键,或者这只是django魔力的一部分?!)

我的桶结构:
https://s3-eu-west-1.amazonaws.com/bucket/revision/process/images.png

我找到的几乎所有教程和软件包都基于上传/下载,而不是我想要的一种简单的
桶中键
类型方法


我的问题之一是理解如果我使用Base.html,如何将Boto函数与Django集成。在以前的教程中,我有一个索引页,它有一个视图,可以从那里调用函数。但是base不需要它,所以我开始有点迷路了。

没有查看boto api是否发生了变化,但上次我查看时它就是这样工作的

from boto.s3.connection import S3Connection
from boto.s3.key import Key
import s3config

conn    = S3Connection(s3config.passwd, s3config.secret)
bucket  = conn.get_bucket(s3config.bucket)
s3_path = '/some/path/in/your/bucket'
keys    = bucket.list(s3_path)
# or if you want all keys:
# keys   = bucket.get_all_keys()

for key in keys:
  print key
  # here you can download or do other stuff
  # with the keys like get some metadata
  print key.name
  print key.etag
  print key.size
  print key.last_modified


更新:

AmazonS3是一个键值存储,其中键是一个字符串。因此,没有什么可以阻止您输入以下密钥:

/this/string/key/looks/like/a/unix/path
/folder/images/fileA.jpg
/folder/images/fileB.jpg
/folder/images/folderX/fileX1.jpg
现在
bucket.list(prefix=“/folder/images/”)
将生成后三个。 请查看此处了解更多详细信息:


这是我的代码,用于将boto、django从s3存储到mysql的结果

from demo.models import Movies
import boto
from boto.s3.key import Key
import string
from django.db import connection, transaction

def movietitle(b):
    key = b.get_key('netflix/movie_titles.txt')
    content = key.get_contents_as_string()
    line = content.split('\n')
    args = []
    for imovie in line:
        if len(imovie) > 0:
            imovie = imovie.split(',')
            movieid = imovie[0]
            year = imovie[1]
            title = imovie[2]
            iargs = [string.atoi(movieid),title,year]
            args.append(iargs)
    cursor = connection.cursor()
    sql = "insert into demo_movies(MovieID,MovieName,ReleaseYear) values(%s,%s,%s)"
    cursor.executemany(sql,args)
    transaction.commit_unless_managed()
    cursor.close()

非常感谢。现在,我想我需要找出一些正则表达式来将key.name分隔到文件夹中,这样我就可以在bucket浏览中建立一些组织,而不仅仅是一个庞大的图像列表。如果你没记错的话,如果你想以“类似unix路径”的方式组织文件,你可以使用bucket.list(s3_路径)函数,因为它列出了所有具有相同起始字符串的键。查看“list()”函数的参数(即前缀等),谢谢。波托被证明是伟大的。现在我只需要继续阅读Djangobook,了解如何存储这些信息。
/this/string/key/looks/like/a/unix/path
/folder/images/fileA.jpg
/folder/images/fileB.jpg
/folder/images/folderX/fileX1.jpg
from demo.models import Movies
import boto
from boto.s3.key import Key
import string
from django.db import connection, transaction

def movietitle(b):
    key = b.get_key('netflix/movie_titles.txt')
    content = key.get_contents_as_string()
    line = content.split('\n')
    args = []
    for imovie in line:
        if len(imovie) > 0:
            imovie = imovie.split(',')
            movieid = imovie[0]
            year = imovie[1]
            title = imovie[2]
            iargs = [string.atoi(movieid),title,year]
            args.append(iargs)
    cursor = connection.cursor()
    sql = "insert into demo_movies(MovieID,MovieName,ReleaseYear) values(%s,%s,%s)"
    cursor.executemany(sql,args)
    transaction.commit_unless_managed()
    cursor.close()