在Python中,数据库并不是存储大量结构化数据的最简单解决方案。dataset提供了一个简单的抽象层,可以删除大多数直接的 SQL 语句,而无需完整的 ORM 模型,数据库可以像 JSON 文件或 NoSQL 存储一样使用。 特点
连接数据库# connecting to a SQLite database db = dataset.connect('sqlite:///mydatabase.db')
# connecting to a MySQL database with user and password db = dataset.connect('mysql://user:password@localhost/mydatabase')
# connecting to a PostgreSQL database db = dataset.connect('postgresql://scott:tiger@localhost:5432/mydatabase') 存储数据
将数据存储在只需传递一个dict即可插入。不需要创建列名称和年龄——数据集会自动执行此操作: # Insert a new record. table.insert(dict(name='John Doe', age=46, country='China'))
# dataset will create 'missing' columns any time you insert a dict with an unknown key table.insert(dict(name='Jane Doe', age=37, country='France', gender='female')) table.update(dict(name='John Doe', age=47), ['name']) id 列。使用with dataset.connect() as tx: tx['user'].insert(dict(name='John Doe', age=46, country='China')) 通过调用方法获得相同的功能begin(), commit()并rollback() 明确:
也支持嵌套事务:
检查数据库和表
列出表中所有可用的列
使用 len() 获得表中的总行数:
从表中读取数据现在让我们从表中获取一些真实数据: users = db['user'].all() 如果我们只是想遍历表中的所有行,我们可以省略all():
我们可以使用find()搜索特定条目find_one(): # All users from China chinese_users = table.find(country='China')
# Get a specific user john = table.find_one(name='John Doe')
# Find multiple at once winners = table.find(id=[1, 3, 7])
# Find by comparison operator elderly_users = table.find(age={'>=': 70}) possible_customers = table.find(age={'between': [21, 80]})
# Use the underlying SQLAlchemy directly elderly_users = table.find(table.table.columns.age >= 70) 使用 distinct()我们可以在一个或多个列中获取一组具有唯一值的行:
最后,您可以使用row_type参数来选择返回结果的数据类型: import dataset from stuf import stuf
db = dataset.connect('sqlite:///mydatabase.db', row_type=stuf) 现在内容将在对象中返回stuf(基本上,dict 其元素可以作为属性 ( item.name) 以及索引 ( item['name']) 访问的对象。 运行自定义 SQL 查询当然,您使用数据库的主要原因是您希望使用 SQL 查询的全部功能。下面是你如何运行它们dataset:
该query()方法还可用于访问底层的SQLAlchemy 核心 API,它允许以编程方式构建更复杂的查询: table = db['user'].table statement = table.select(table.c.name.like('%John%')) result = db.query(statement) |
|