【发布时间】:2013-12-05 04:17:52
【问题描述】:
所以我在 Flask 的 sqlite 数据库中有这个 db.model。它看起来像这样:
class Drink(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(64), index = True)
kind = db.Column(db.String(64), index = True)
image = db.Column(db.LargeBinary)
def __init__(self, name, kind, image):
self.name = name
self.kind = kind
self.image = image
def __repr__(self):
return '<Drink %r>' % self.name
所以,这个问题是我有这个专栏,image,这将是一张实际的图片,但我不知道在flask代码中使用什么数据类型。
这是烧瓶代码: 烧瓶
class DrinkAPI(Resource):
def __init__(self):
self.reqparse = reqparse.RequestParser()
self.reqparse.add_argument('name', type = str, required = True, help = 'No name title provided', location = 'json')
self.reqparse.add_argument('type', type = str, required = True, help='No type provided', location = 'json')
self.reqparse.add_argument('image', type = blob, required = True, help='No image provided', location = 'json')
super(DrinkAPI, self).__init__()
def get(self, id):
if checkDrink(id):
info = getDrinkInfo(id)
return {'id': id, 'name': info[0], 'type':info[1], 'image': info[2]}
abort(404)
def put(self, id):
if checkDrink(id):
args = self.reqparse.parse_args()
deleteDrink(id)
drink = Drink(args['name'], args['type'], args['image'])
addDrink(drink)
return {'drink' : marshal(drink, drink_fields)}, 201
abort(404)
def delete(self, id):
deleteDrink(id)
return { 'result': True}
看到我在哪里将image 的reqparse 的类型设置为blob?这甚至不是一个实际的数据类型,但我不知道该放什么。我需要继承fields.Raw 吗?有任何想法吗?谢谢
问题的新方法
根据一些 cmets,我似乎应该将图像存储在我的静态文件夹中。我能做到。但是我如何在我的数据库中引用它呢?是对应.jpg文件的字符串吗?
【问题讨论】:
-
为什么不将图像的文件位置存储在数据库中?
-
在文件系统中存储图像/大型二进制数据通常是一个更好的主意。不确定您的特定 SQLite 实现,但这些框架中的大多数都有简单的方法可以将图像上传到文件系统或从文件系统提供图像,将密钥或路径存储在数据库中。如果您打算使用数据库,不妨试试:stackoverflow.com/questions/11017466/… 但请注意,这比使用文件系统和提供静态文件的效率要低得多。
-
我想将图像放在静态文件夹中就可以了。那么,我的数据库中只会有一个
String,它是图片本身的路径?这是如何运作的?数据库如何知道这是一条路径,而不仅仅是一个奇怪的字符串?
标签: python sqlite types flask-extensions