可以在SQLite中存储Python类对象吗?

前端之家收集整理的这篇文章主要介绍了可以在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

所以你有效地将对象存储到数据库中,是最好的方法

猜你在找的Sqlite相关文章