加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 19:15:11 所属栏目:百科 来源:网络整理
导读:我想将Python对象存储到一个 SQLite数据库中。那可能吗? 如果是这样,会有一些链接/例子呢? 您不能将对象本身存储在数据库中。您所做的是从对象中存储数据,并在以后进行重构。 一个很好的方法是使用优秀的SQLAlchemy库。它可以将您定义的类映射到数据库中
我想将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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读