[toc]
项目背景
目前每次我们存数据库的时候都会有这样的问题,所有的数据在同步。或者说在入库时我们需要写入库的相关代码【day by day】,本着:
DRY - Don't Repeat Yourself(不要重复你自己)原则于是我想到了我们可以异步及批量数据操作器。
项目构想
- 我们只需要关注数据的问题,不用再太多费心操作相关的创建表,修改表相关字段问题
项目支持的数据库类型
- MySQL
- SqlServer
- PostgreSQL
- KafKa
- ElasticSearch
实现的功能
- 智能创建表和字段
- 批量数据插入操作
- 操作数据同一个表字段不同时,会到表中智能增加字段
- 支持数据库的连接参数重写操作
配置文件
在config.py文件中配置数据库和消息队列的连接信息。您需要设置如下环境变量:
ES_HOST_PORT_LIST: Elasticsearch的主机和端口列表。KAFKA_HOST,KAFKA_PORT,KAFKA_TOPIC: Kafka的主机、端口和主题。- 数据库相关配置(如SQL Server、PostgreSQL、MySQL)。
文件说明
DBOP(Database Operation)数据库操作相关代码
- x_sqlserver.py文件用来存储处理x_sqlserver数据的管道
- x_mysql.py文件用来存储处理x_mysql数据的管道
- x_kafka.py文件用来存储处理kafka数据的管道
- x_mongo.py文件用来存储处理Mongo数据的管道
基本实例
# 导入mysql
from xdbx import x_mysql
# 导入sqlserver
# from xdbx import x_mssql
# 数据库ip
x_mysql.host = '127.0.0.1'
# 数据库端口 【mysql默认为3306】
x_mysql.port = 3306
# 数据库用户名
x_mysql.username = 'root'
# 数据库密码
x_mysql.password = '123456'
# 数据库名【需要先创建好的数据库】
x_mysql.db = 'test'
# 插入一条
x_mysql.insert_one(item={'a': 1, 'b': 2}, table='ceshi_20211229')
# 插入多条
x_mysql.insert_many(items=[{'a': 1, 'b': 2}, {'a': 1, 'b': 2}, {'a': 1, 'b': 2}, {'a': 1, 'b': 2}],
table='ceshi_20211229')
使用方法
Elasticsearch 交互
使用XES类与Elasticsearch进行交互。示例代码如下:
from xdbx import x_es
# 实例化并连接Elasticsearch
es = x_es.connect()
# 执行查询
query_json = '{"query": {"match_all": {}}}'
results = es.query(query_json)
# 将结果写入Excel
es.query(query_json, to_excel=True)
Kafka 交互
将Kafka进行了封装,对平时我们爬虫的一些常规数据存储做操作,利用单例模式开发支持多线程操作【加锁】 使用
XKafka类与Kafka进行交互。示例代码如下:
from xdbx import x_kafka
# 实例化Kafka生产者
kafka_producer = x_kafka._connect()
# 发送消息
message = {'key': 'value'}
kafka_producer.insert(message)
SQL Server 交互
将SqlServer进行了封装,会自动智能的去创建一些表和字段相关的东西,会省爬虫开发者一些时间 使用
SqlServerPipeline类与SQL Server进行交互。示例代码如下:
from xdbx import x_mssql
# 实例化SQL Server管道
sql_server = x_mssql()
# 插入数据
item = {'column1': 'value1', 'column2': 'value2'}
table = 'your_table_name'
sql_server.insert_one(item, table)
PostgreSQL 交互
将PostgreSQL进行了封装,会自动智能的去创建一些表和字段相关的东西,会省爬虫开发者一些时间。 使用
PostgrePipeline类与PostgreSQL进行交互。示例代码如下:
from xdbx import x_pgsql
# 实例化PostgreSQL管道
postgres = x_pgsql()
# 执行SQL查询
sql = 'SELECT * FROM your_table'
results = postgres.find(sql)
MySQL 交互
将MySQL进行了封装,会自动智能的去创建一些表和字段相关的东西,会省爬虫开发者一些时间。因为mysql<=5.5版本可能有些创建更新时间不稳定的问题,我已经把相关的代码先暂时不开放,如果有更好的方案我们再优化一下。 使用
MysqlDB类与MySQL进行交互。示例代码如下:
from xdbx import x_mysql
# 实例化MySQL数据库连接
mysql = x_mysql()
# 执行SQL查询
sql = 'SELECT * FROM your_table'
results = mysql.find(sql)
错误处理
在使用过程中,如果遇到连接错误或查询错误,请检查配置文件中的连接信息是否正确,并查看日志输出的错误详情。
联系我们
如果有任何问题或需要进一步的帮助,请联系我们。
Q&A
Q0:解决触发器的问题
注:相同数据库中不能有相同的触发器,虽然作用于这个表,但是他的范围是相对于数据库,相当于函数名
Q1:解决字段名大小写不同判断有误的问题
使用字段做对比时全进行转换成小写后再对比
Metadata
Release files for xdbx 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xdbx-1.1.1.tar.gz | 15.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xdbx-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.0 kB
Release files / xdbx-1.1.1.tar.gz
| Download URL | xdbx-1.1.1.tar.gz |
|---|---|
| Size | 15.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
575220b773febfbf5e9113cbabeed3561b16980c5cd3e82b409a71b55e771a3a
|
|
BLAKE2b-256 checksum How to use checksums |
9e714a0d8539a98f7560118d10a66837a2e0b9523d7b72d098af8998fe209ddf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.8.16
|
Release files / xdbx-1.1.1-py3-none-any.whl
| Download URL | xdbx-1.1.1-py3-none-any.whl |
|---|---|
| Size | 20.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7def93fcd58e8eb2b5909a458c2939f34f43f6ccce31f2ce1b9bd32ad34e1bfd
|
|
BLAKE2b-256 checksum How to use checksums |
7bb7694cdf93c0230a796bf735abf33a7445cb29bc31e10f3b6d8d6454f96c1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.0.1 CPython/3.8.16
|