写本文的理由

百度搜出来的大多是垃圾信息。CSDN全是无脑复制的内容排版说明什么都没有,实在是无语,还是直奔官网吧。
按照官方指引写了一个简单的Demo,操作数据库确实很方便。这里整理了一下贴出来供参考。

官网

http://www.sqlobject.org/
官网示例:http://www.sqlobject.org/SQLObject.html#using-sqlobject-an-introduction

安装

pip3 install -U SQLObject

为vscode添加自动补全提示

  • 查看安装位置:
    进入python命令行

    >>> import sqlobject
    >>> sqlobject.__path__
  • 将安装位置添加到.settings.json

    "python.autoComplete.extraPaths": ["/XXXX/lib/python3.X/site-packages/"]

上代码,包括了基本的CRUD操作,直接复制粘贴运行即可,注释都写的很清楚了

import sys,os
from sqlobject import sqlhub
from sqlobject import SQLObject
from sqlobject import connectionForURI
from sqlobject.col import StringCol
from sqlobject.col import TinyIntCol
from sqlobject.sqlbuilder import AND, LIKE, OR
# 直接使用 from sqlobject import * 也可以运行,只是在vscode下缺乏代码提示

class Person(SQLObject):
    """
    这个例子相当于创建了以下的表
    注意,驼峰命名法 的变量名 会被映射为 下划线分割 的 字段名 或 表名
    CREATE TABLE person (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_name TEXT,
        user_age TINYINT
    )
    """
    userName = StringCol()
    userAge = TinyIntCol()

# 使用内存数据库,退出程序就会销毁
def useMemoryDb():
    connection_string = 'sqlite:/:memory:'
    connection = connectionForURI(connection_string)
    sqlhub.processConnection = connection

# 使用文件数据库
def useFileDb():
    db_filename = os.path.abspath('test.db')
    connection_string = 'sqlite:' + db_filename
    connection = connectionForURI(connection_string)
    sqlhub.processConnection = connection

def playTable():
    #Person._connection.debug = True #这个设置可以看到每一条命令的背后实际上在背后发生了什么(实际的SQL内容输出)

    print("-- 创建table")
    Person.createTable()

    print("-- 插入一条数据")
    row = Person(userName="芒果", userAge=10)
    print("   插入完成:%s " % row)

    print("-- 修改一条数据")
    row.userName = "雨歌"
    print("   修改完成:%s " % row)

    print("-- 再插入几条数据")
    xiaowang = Person(userName="小王", userAge=12)
    print("   插入完成:%s " % xiaowang)
    row = Person(userName="小红", userAge=14)
    print("   插入完成:%s " % row)
    row = Person(userName="小黑狗", userAge=18)
    print("   插入完成:%s " % row)

    print("-- 用set函数修改一条数据")
    xiaowang.set(userName="大王", userAge=20)
    print("   修改完成:%s" % xiaowang)

    print("-- 检索数据(userName='大王' and userAge=20)")
    peeps = Person.selectBy(userName="大王", userAge=20)
    print("   找到 %s 条记录" % peeps.count())

    print("-- 更复杂的检索(userName like '%小%' and userAge < 15)")
    peeps = Person.select(AND( LIKE(Person.q.userName, "%小%"), Person.q.userAge < 15))
    print("   找到 %s 条记录" % peeps.count())

    print("-- 删除数据(userName='大王')")
    Person.deleteBy(userName="大王")

    print("-- 用列表遍历剩余记录")
    rows = list(Person.select())
    for row in rows:
        print("   %s, %s" % (row.userName ,row.userAge))

    

if (__name__ == '__main__'):
    useMemoryDb()
    #useFileDb()
    playTable()
Last modification:May 21, 2021
If you think my article is useful to you, please feel free to appreciate