Skip to main content

sqlite3 数据库的包装器,使您能够创建可以轻松查询、保存和更新的模型。

项目描述

sqlitemodel 是 sqlite3 数据库的包装器,使您能够创建可以轻松保存、查询和从数据库中检索的模型。

这是用抽象数据库通信和对象管理的三个类构建的。

安装

通过pip安装。

$ pip install sqlitemodel

或从源头获取

$ git clone https://github.com/gravmatt/sqlitemodel.git
$ cd sqlitemodel
$ python setup.py install

课程

模型

类来抽象模型与数据库的通信。

用法

进口

from sqlitemodel import Model, Database

# IMPORTANT
Database.DB_FILE = 'path/to/database.db'

在应用程序启动时或尝试访问数据库之前设置数据库路径。

例子

构建一个继承 Model 类的用户类来展示它是如何工作的。

class User(Model):
    def __init__(self, id=None):
        Model.__init__(self, id, dbfile=None, foreign_keys=False, parse_decltypes=False)

        self.firstname = ''
        self.lastname = ''
        self.age = ''

        # Tries to fetch the object by its rowid from the database
        self.getModel()


    # Tells the database class the name of the database table
    def tablename(self):
        return 'users'


    # Tells the database class more about the table columns in the database
    def columns(self):
        return [
            {
              'name': 'firstname',
              'type': 'TEXT'
            },
            {
              'name': 'lastname',
              'type': 'TEXT'
            },
            {
              'name': 'age',
              'type': 'INTEGER'
            }
        ]

需要两个方法tablename()columns()来将表列与模型对象映射。

构造函数中的id参数和getModel()方法是可选的。

也可以使用selectCopy()方法查询数据库表中的任何数据,并用结果填充模型对象。

selectCopy(SQL() | raw_sql_query_string)

前任:

class User(Model):
    def __init__(self, id=None, email=None):
        Model.__init__(self, id)
        if(email):
            self.selectCopy(SQL().WHERE('email', '=', email))

``Model`` 类构造函数有一个可选的 ``dbfile`` 参数。如果已设置,则忽略静态变量“Database.DB_FILE”。

使用 User 类

创建新用户

# create a new user
user = User()

# creating the table inside the database
user.createTable()

# add infos about the user
user.firstname = 'Rene'
user.lastname = 'Tanczos'
user.age = 25

# save the user into the database
user.save()

从数据库中检索用户

# get it by id
user = User(1)

# get the user by his firstname and lastname
# User().selectOne(SQL())
user = User().selectOne(SQL().WHERE('firstname', '=', 'Rene').AND().WHERE( 'lastname', '=', 'Tanczos'))

# Or get more the one user
# this method will return an array of matching users
users = User().select(SQL().WHERE('age', '=', 25))

SQL

类来构建 SQL 查询以减少拼写错误并稍微抽象一下这个问题。

用法

进口

from sqlitemodel import SQL

插入

sql = SQL().INSERT('users').VALUES(firstname='Rene', lastname='tanczos')

print sql.toStr()
# INSERT INTO users (firstname,lastname) VALUES (?,?);

print sql.getValues()
# ('Rene', 'tanczos')

更新

sql = SQL().UPDATE('users').SET('firstname', 'Rene').SET('lastname', 'Tanczos').WHERE('firstname', '=', 'Rene').AND().WHERE('lastname', '=', 'Tanczos')

print sql.toStr()
# UPDATE users SET firstname=?, lastname=? WHERE firstname=? AND lastname=?;

print sql.getValues()
# ('Rene', 'Tanczos', 'Rene', 'Tanczos')

选择

sql = SQL().SELECT('name', 'age', 'size').FROM('users').WHERE('age', '=', 27).AND().WHERE('size', '<', 190).ORDER_BY('age', 'ASC').LIMIT(0, 10)

print sql.toStr()
# SELECT name, age, size FROM users WHERE age=? AND size<? ORDER BY age ASC LIMIT 0,10;

print sql.getValues()
# (27, 190)

在哪里

WHERE 方法有一个可选的isRaw参数。

如果设置为True,则 SQL 类将值直接粘贴到 sql 查询中并且不使用? 象征。

WHERE('size', '<', 190, isRaw=True)

删除

sql = SQL().DELETE('users').WHERE('id', '=', 4)

print sql.toStr()
# DELETE FROM users WHERE id=?;

print sql.values
# (4,)

数据库

表示数据库。

用法

首先,您应该将数据库文件路径设置为您的 sqlite3 数据库。

如果它还不存在,请不要担心。如果所选路径不存在,Sqlite3 会自动在所选路径上创建一个数据库文件。

from sqlitemodel import Database

设置数据库路径

建议在启动应用程序后通过Database类中的静态变量设置数据库的路径。

Database.DB_FILE = 'path/to/database.db'

db = Database()

但也可以在对象初始化时在Database构造函数中设置路径。

db = Database('path/to/database.db')

声明

Database类支持with语句,推荐使用。

with Database() as db:
    users = db.select(SQL().SELECT().FROM('users'))

处理完with块后,数据库连接会自动关闭。

方法

所有这些方法都使用Model对象作为第一个参数,以便 Database对象知道如何使用它。

close()
# close connection

createTable(model)
# create the database table if not exists by the the model object

save(model)
# create or update a model object and return it id

delete(model)
# delete a model object and return True/False

select(model, SQL() | sql query , values=())
# return a array of the given model

selectOne(model, SQL() | sql query, values=())
# return the first matching entry of the given model

selectById(model, id)
# return the a model object by his id

如果有一些数据没有Model,则可以将其作为列表Dict对象列表的原始数据进行检索。

getRaw(SQL() | sql query, values=(), max=-1)
# return an array of results.
# index 0 is the header of the table

getDict(SQL() | sql query, values=(), max=-1)
# return a list array with a Dict object.
# the key of the Dict object is the column name

要计算查询的结果,可以使用方法zeroZero() 。

zeroZero(SQL() | sql query)
# It return the the first column of the first line ( result[0][0] )
# That why the method is called zeroZero()

要检查表或列是否存在,可以使用函数table_exists()column_exists()。如果找到表/列,两者都将返回一个布尔值。

table_exists('tablename')
# True or False

column_exists('tablename', 'column_name')
# True or False

执照

麻省理工学院许可证 (MIT)

版权所有 (c) 2016-2017 René Tanczos

特此免费授予任何人获得本软件和相关文档文件(“软件”)的副本,以不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售本软件的副本,并允许向其提供本软件的人这样做,但须符合以下条件:

上述版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。

本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任承担任何责任,无论是在合同、侵权或其他方面,由本软件或本软件的使用或其他交易引起或与之相关。软件。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

sqlitemodel-0.1.3.tar.gz (8.0 kB 查看哈希)

已上传 source