https://github.com/skyduy/dblink
安装:pip install dblink
假设数据库中有两张已存在的表users
和address
:
CREATE TABLE users (
id INTEGER NOT NULL,
name VARCHAR(50),
fullname VARCHAR(50),
password VARCHAR(12),
PRIMARY KEY (id)
);
CREATE TABLE addresses (
id INTEGER NOT NULL,
email_address VARCHAR NOT NULL,
user_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(user_id) REFERENCES users (id)
);
你可以使用 Database Urls 进行连接数据库。
from dblink import Database, Table
# 手动关闭连接
db = Database(url='sqlite:///:memory:')
user_table = Table('users', db)
# 增删改查操作
db.close()
# 推荐使用 with 自动管理
with Database(url='postgresql://scott:tiger@localhost/mydatabase') as db:
address_table = Table('addresses', db)
# 增删改查操作
下面是使用例子
"""
Suppose you have two table: users and addresses.
"""
from dblink import Database, Table
with Database('sqlite:///:memory:') as db:
table_user = Table('users', db)
table_address = Table('addresses', db)
# show description
print(table_user.description)
print(table_address.description)
# chain query, you can call delete on the single table result
table_user.query.filter(id=1).one_or_none()
table_user.query.filter(id__gte=2) \
.order_by('name') \
.values_list('id', 'name')
table_user.query.filter(id__in=[1, 2, 3]) \
.filter(name__startswith='Yu').all()
table_user.query.order_by('-name') \
.values_list('fullname', flat=True, distinct=True)
table_user.query.distinct('name').values_list('name', flat=True)
table_user.query.filter(id__in=[1, 2, 3]).delete()
# join query
table_user.join(table_address) \
.filter(id__lt=10000) \
.filter(email_address__contains='gmail') \
.filter(**{'addresses.id__gte': 100}) \
.values_list('user_id', 'name', 'email_address',
table_address.id, 'users.fullname')
# get or insert
instance, create = table_user.get_or_insert(id=1, name='jone')
# single record operation.
table_user.insert({'id': 1, 'name': 'XiaoHong', 'password': 'psw'})
table_user.update({'id': 1, 'name': 'skyduy', 'password': 'psw'},
unique_fields=['id'], update_fields=['name', 'password'])
table_user.insert_or_update(
{'id': 1, 'name': 'skyduy', 'password': 'psw'},
unique_fields=['id'], update_fields=['name', 'password']
)
table_user.delete({'id': 1, 'name': "I don't matter"},
unique_fields=['id'])
# bulk operation
items = [{'id': 1, 'name': 'XiaoHong', 'password': 'haha'},
{'id': 2, 'name': 'skyduy', 'password': 'aha'},]
unique_fields = ['id']
update_fields = ['name']
table_user.bulk_insert(items)
table_user.bulk_delete(items, unique_fields)
table_user.bulk_update(items, unique_fields, update_fields)
table_user.bulk_insert_or_update(items, unique_fields, update_fields)
1
qile1 2020-01-13 13:42:15 +08:00 via Android
支持微软数据库 mssql 不?不是 mysql,sqlserver 那种的好像查询不一样!
|
2
CallMeReznov 2020-01-13 14:02:50 +08:00
sqllite 默认的库一般讲道理需求和写起来都比较容易实现,主要痛点还在于多线程的连接池管理上
我前几天直接就是用的自带的库,也就一个线程就疯狂报错 最后还是上了 PersistentDB |
3
skyduy OP @qile1
因为这个是基于 SQLAlchemy 封装的,所以支持。 更改 Database URL 即可,详见: https://docs.sqlalchemy.org/en/13/core/engines.html#microsoft-sql-server |