写本文的理由
百度搜出来的大多是垃圾信息。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()