可以在SQLite中存储Python类对象吗?
我想将Python对象存储到一个
SQLite数据库中。那可能吗?
如果是这样,会有一些链接/例子呢? 您不能将对象本身存储在数据库中。您所做的是从对象中存储数据,并在以后进行重构。一个很好的方法是使用优秀的SQLAlchemy库。它可以将您定义的类映射到数据库中的表。每个映射属性将被存储,并且可以用于重构对象。查询数据库返回你的类的实例。 有了它,您不仅可以使用sqlite,还可以使用大多数数据库 – 它目前还支持Postgres,MySQL,Oracle,MS-SQL,Firebird,MaxDB,MS Access,Sybase,Informix和IBM DB2。并且您可以让用户选择要使用哪一个,因为您可以在这些数据库之间进行切换,而无需更改代码。 还有很多很酷的功能 – 如自动JOIN,多态… 一个快速简单的例子,你可以运行: from sqlalchemy import Column,Integer,Unicode,UnicodeText,String from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from random import choice from string import letters engine = create_engine('sqlite:////tmp/teste.db',echo=True) Base = declarative_base(bind=engine) class User(Base): __tablename__ = 'users' id = Column(Integer,primary_key=True) name = Column(Unicode(40)) address = Column(UnicodeText,nullable=True) password = Column(String(20)) def __init__(self,name,address=None,password=None): self.name = name self.address = address if password is None: password = ''.join(choice(letters) for n in xrange(10)) self.password = password Base.metadata.create_all() Session = sessionmaker(bind=engine) s = Session() 那么我可以这样使用它: # create instances of my user object u = User('nosklo') u.address = '66 Some Street #500' u2 = User('lakshmipathi') u2.password = 'ihtapimhskal' # testing s.add_all([u,u2]) s.commit() 这将针对数据库运行INSERT语句。 # When you query the data back it returns instances of your class: for user in s.query(User): print type(user),user.name,user.password 该查询将运行SELECT users.id AS users_id,users.name AS users_name,users.address AS users_address,users.password AS users_password。 打印结果将是: <class '__main__.User'> nosklo aBPDXlTPJs <class '__main__.User'> lakshmipathi ihtapimhskal 所以你有效地将对象存储到数据库中,是最好的方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |