我有一组文件,大约300个文件,每行50,000行。每行是一个带有二进制值(1或0)的字符串标签。所有文件都具有相同的条目,但二进制值不同。下面的文件示例。
Tag1 0
Tag2 1
...
Tag50000 0
我打算构建一个具有多个功能的Python Flask Web工具,该功能将比较两个“文件”或查找每个带有特定标记为1的“文件”。另一种选择是搜索目录中的所有文件以进行比较。我相信使用某些SQL数据库对查询的功能非常强大,但是我有一些疑问。这就是我想象的数据库结构,但我可能是错的。
Filename1 Tag1-value Tag2-value ... Tag50000-value
Filename2 Tag1-value Tag2-value ... Tag50000-value
...
Filename300 Tag1-value Tag2-value ... Tag50000-value
我在使用SQLAlchemy for Flask方面有一些经验,但是从我以前的使用开始,每个数据库值都需要在应用程序的models文件中单独声明,这对于50,000个特征而言似乎效率很低。是否可以将所有这些数据输入不同的SQL数据库并仍然在flask中访问它?
这就是我认为必须建立模型的方式,如果有必要,我会写出所有50,000个标签,但我必须相信有一种更简单的方法可以做到这一点。
class Dataset(db.Model):
id = db.Column(db.Integer, primary_key=True)
filename = db.Column(db.String(64), index=True, unique=True)
tag1 = db.Column(db.Boolean) # or tag1 = db.Column(db.Integer)
tag2 = db.Column(db.Boolean) # or tag2 = db.Column(db.Integer)
# ...
tag50000 = db.Column(db.Boolean) # or tag50000 = db.Column(db.Integer)
答案 0 :(得分:0)
这是我当前的工作解决方案,不是很优雅,可能会有更好的优化方法。两个表,第一个用于每个“文件名”,第二个用于每个标签。
表1:
FileId ReferencetoTag
表2:
TagId Value(0/1) FileId(ForeignKey)
class Sample(db.Model):
id = db.Column(db.Integer, primary_key=True)
# Sample_id and filename are synonymous
Sample_id = db.Column(db.String(10), index=True, unique=True)
tags = db.relationship('Tag', backref='name', lazy='dynamic')
def __repr__(self):
return '<File_id {}>'.format(self.File_id)
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
tag_id = db.Column(db.String(20), index=True)
value = db.Column(db.Boolean)
sample_id = db.Column(db.Integer, db.ForeignKey('sample.id'))
def __repr__(self):
return '<Gene_id {}>'.format(self.gene_id)