# Python
# Python使用tablib生成excel文件示例
首先要安装tablib模块,在命令行输入:pip intall tablib
import tablib
headers = ('lie1', 'lie2', 'lie3', 'lie4', 'lie5')
mylist = [('23','23','34','23','34'),('sadf','23','sdf','23','fsad')]
mylist = tablib.Dataset(*mylist, headers=headers)
with open('excel.xlsx', 'wb') as f:
f.write(mylist.xlsx)
# 查询python安装了哪些模块
pydoc modules
>>> import sys
>>> sys.modules.keys()
# 阿里巴巴开源ETL工具DataX配置及使用
因公司内部业务系统使用的数据库不一样,需要做一些数据报表在一个系统中,通过datax可以拉取不同数据库的数据到数据仓库中
- 环境要求
- JDK1.6以上版本,推荐1.6
- python 2.x版本,推荐2.6.6
直接下载打包好的 DataX (opens new window) 1 (opens new window): https://github.com/alibaba/DataX
通过ssh工具上传到linux服务器
rz datax.tar.gz
- 解压程序包
tar -zxvf datax.tar.gz
- 进入bin目录,生成读mysql写Oracle的json配置文件
python datax.py -r mysqlreader -w oraclewriter
- 修改配置文件
{
"content":[
{
"reader":{
"name":"mysqlreader",
"parameter":{
"column":[
"EMPNAME",
"CUSTFLAG",
"RMB"
],
"connection":[
{
"jdbcUrl":[
"jdbc:mysql://10.12.1.27:3306/rss4product"
],
"table":[
"RSS_CRM_RMB"
]
}
],
"password":"*********",
"username":"root",
"where":""
}
},
"writer":{
"name":"oraclewriter",
"parameter":{
"column":[
"EMPNALE",
"CUSTFLAG",
"RMB"
],
"connection":[
{
"jdbcUrl":"jdbc:oracle:thin:@172.16.2.33:1521:ORCL",
"table":[
"RSS_CRM_RMB"
]
}
],
"password":"*************",
"preSql":[
"delete from RSS_CRM_RMB"
],
"username":"COREMAILCRM"
}
}
}
],
"setting":{
"speed":{
"channel":1
}
}
}
- 传输数据
python datax.py ../task/rss2crm_rmb.json
- 配置crontab 定制拉数据
# Django 从已有的数据库实体反向创建model
Django ORM 的 migrate 命令可以让开发人员不用接触数据库脚本,用代码构建一个项目,并且Django支持自动跟踪model class的变动。 但比如我现在一个项目,需要把客户的一个系统中的工资数据查询出来,已经有现有的数据库表结构,就需要从数据库实体表来反向生成Django 的models中的class。
# 查询数据库表结构
mysql> desc bak_its_hr20191029;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| FId | bigint(20) | NO | | 0 | |
| FClockTime | datetime | YES | | NULL | |
| FEmail | varchar(255) | YES | | NULL | |
| FExternalId | varchar(36) | YES | | NULL | |
| FGps | varchar(255) | YES | | NULL | |
| FMacAddr | varchar(255) | YES | | NULL | |
| FSyncMessage | varchar(255) | YES | | NULL | |
| FSyncTime | datetime | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
# 反向生成modes.py
inspectdb 命令可以查找settings.py中配置的数据库中的表来生成modes.py,如果有多个可以加 --database参数指定数据库,为空默认为defaule数据库,命名后可指定表名,多个表名以逗号分隔.
py .\manage.py inspectdb bak_its_hr20191029
确认内容无误后,再执行
py .\manage.py inspectdb bak_its_hr20191029 > .\chrtest\models.py
特别注意,生成的class中有个 managed = false 属性,这意味着Django不会表该表进行更新。如果这个属性为true, 则modes中的变化会同步更新到数据库
# 获取列表最小值或最大值
chwlist = [3, 9, 7, 7, 1, 4]
# 获得列表最大值索引
print(chwlist.index(max(chwlist)))
# 1
# 获得列表最小值索引
print(chwlist.index(min(chwlist)))
# 4
# 获得字典最大值或最小值的key
chwdire = {'key55':55, 'key44':44, 'key99':99, 'key22':22}
print(max(chwdire, key=chwdire.get)) # 获得字典最大值的key
# key99
print(min(chwdire, key=chwdire.get))
# key22
# 查找过滤列表中的数据
chwlist = [{"id": 101, "timestamp": 11594},
{"id": 102, "timestamp": 19346},
{"id": 103, "timestamp": 95412},
{"id": 104, "timestamp": 84694}]
# 筛选id等于103而且timestamp大于等于10000的元素
chsres0 = [x for index, x in enumerate(chwlist) if
{k: v for k, v in x.items() if (k == "timestamp" and v == 10000)}
and
{k: v for k, v in x.items() if (k == "id" and v == 103)}
]
print(chsres0)