0

我有以下具有相关属性的类:

class Company(object):
    self.ticker # string
    self.company # string
    self.creator # string
    self.link # string
    self.prices # list of tuples (this could be many hundreds of entries long)
    self.creation_date # date entry

我填充个别公司,然后将公司列表存储到公司类中:

class Companies(object):
    def __init__(self):
        self.companies = []
    def __len__(self):
        return len(self.companies)
    def __getitem__(self, key):
        return self.companies[key]
    def __repr__(self):
        return 'Company list of length %i' % (self.__len__())
    def add(self, company):
        self.companies.append(company)

我希望能够轻松地执行诸如 Companies.find(creator="someguy") 之类的查询,并让该类返回由 someguy 创建的所有公司的列表。我还希望能够运行诸如 Companies.find(creation_date > x) 之类的查询并返回在某个日期之后创建的所有条目的列表。

我有一些使用 Django 的内置 SQL 功能做类似工作的经验,发现这非常方便。但是,这个项目没有使用 Django,我不知道是否有任何其他更小的包提供这个功能。我想尽量减少与 SQL 服务器的接口,因为我没有太多的语言经验。

以下是我的问题:

  1. 要做到以上,我需要使用外部数据库程序吗?或者,是否存在可以执行上述操作的包,并且还允许我轻松保存数据(酸洗或其他)?我觉得,也许是不合理的,当你开始整合 SQL 时,事情开始变得更加混乱和复杂。
  2. 如果上述情况不需要数据库您如何评估何时有足够的数据来合并外部数据库?
  3. 存在哪些包(例如 Django)来最大程度地减少 SQL 跑腿工作?
  4. 说了这么多,你建议我做什么?
4

1 回答 1

0

SQLAlchemy 是一个功能齐全的 Python ORM(对象关系映射器)。它可以在http://www.sqlalchemy.org/找到。

定义新对象的示例用法:

from sqlalchemy import Column, Integer, String

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

def __init__(self, name, fullname, password):
    self.name = name
    self.fullname = fullname
    self.password = password

创建新用户:

>>> ed_user = User('ed', 'Ed Jones', 'edspassword')
>>> ed_user.name
'ed'
>>> ed_user.password
'edspassword'

要写入数据库(在创建新会话之后):

ed_user = User('ed', 'Ed Jones', 'edspassword')
session.add(ed_user)
session.commit()

并查询:

our_user = session.query(User).filter_by(name='ed').first() 
>>> our_user
<User('ed','Ed Jones', 'edspassword')>

更多细节可以在http://docs.sqlalchemy.org/en/rel_0_8/orm/tutorial.html(取自文档)中找到。

于 2013-08-04T20:51:44.480 回答