公司测试环境同步数据需求量巨大,每天都要导出大量生产数据到测试环境, 写了一个自动导数的工具,支持并行导出并自动导入到 测试环境,使用时需自己指定放有 导出过滤语句的文件,需放开生产到测试的网络环境。

#/bin/bash

source /usr/local/greenplum-db/greenplum_path.sh

export local_dir=/backup/csh

USAGE ()

{

echo ""

echo "Usage: -ds -dt -Ds -Dt -hs -ht -p -pt -us -ut -Us -Ut -f -w";

echo "Copydump Parameter Infomation: ";

echo "  Parameter -ds: Source Database Name                                                                                                                                        [源数据库名]";

echo "  Parameter -dt: Target Database Name                                                                                                                                        [目标数据库名]";

echo "  Parameter -Ds: Source Outputfile Directory                                                                                                                                 [源库数据输出路径]";

echo "  Parameter -Dt: Target Copyfile Directory                                                                                                                                   [目标库数据存放路径]";

echo "  Parameter -hs: Source Database Host                                                                                                                                        [源库主机IP地址]";

echo "  Parameter -ht: Target Database Host                                                                                                                                        [目标库主机IP地址]";

echo "  Parameter -p:  Source Database Port                                                                                                                                        [源数据库端口号]";

echo "  Parameter -pt: Target Database Port                                                                                                                                        [目标数据库端口号]";

echo "  Parameter -us: Source Database Username                                                                                                                                    [源数据库用户名]";

echo "  Parameter -ut: Target Database Username                                                                                                                                    [目标数据库用户名]";

echo "  Parameter -Us: Source Host Username                                                                                                                                        [源库主机的用户名]";

echo "  Parameter -Ut: Target Host Username                                                                                                                                        [目标库主机的用户名]";

echo "  Parameter -w: Workflow Number                                                                                                                                              [工作流号]";

echo "  Parameter -f: Copy SQLFile Directory,Default Value: /backup/csh/copysql.sql                                                                                                [源库copysql文件路径]";

echo "  Parameter -pa: Parallel Processes                                                                                                                                                                                [并行度]";

echo ""

echo "  EasyMode:                                                                                                                                                                  [简易模式:]";

echo "  run (copydump 87) can copy data to 192.168.218.87                                                                                                                          ['copydump 87'可拷贝数据至开发库]";

echo "  run (copydump 163) can copy data to 192.168.218.163                                                                                                                        ['copydump 163'可拷贝数据至开发库]";

echo "";

exit 1;

}

if [ $# -lt 2 ]

then

if [ x"$1" == x"87" ]

then

export source_database=dp_bidb

export target_database=dp_dev

export source_ip=10.249.15.22

export target_ip=192.168.218.87

export source_hostuser=gpadmin

export target_hostuser=gpadmin

export source_dbuser=gpadmin

export target_dbuser=gpadmin

export source_port=9432

export target_port=5432

export source_dir=/data2/copy

export target_dir=/u01/csh

echo ""

read -p "Now Input the Workflow Number: " num

if [ x"$num" == x"" ]

then

echo "You Must Input the Workflow Number! Run 'copydump --help' to Get Usage"

echo ""

exit

else

export jira_num="$num"

fi

echo ""

read -p "Now Input Your SQLFile Directory( Default SQLFile is $local_dir/copysql.sql ): " dir

if [ x"$dir" == x"" ]

then

export sql_text=$local_dir/copysql.sql

else

export sql_text="$dir"

fi

echo ""

read -p "Now Input Copy Parallel Processes( Default Parallel is 4 ): " par

if [ x"$par" == x"" ]

then

export parallel=4

else

export parallel="$par"

fi

elif [ x"$1" == x"163" ]

then

export source_database=dp_bidb

export target_database=dp_dw163

export source_ip=10.249.15.22

export target_ip=192.168.218.163

export source_hostuser=gpadmin

export target_hostuser=sgpadmin

export source_dbuser=gpadmin

export target_dbuser=sgpadmin

export source_port=9432

export target_port=6432

export source_dir=/data2/copy

export target_dir=/data1/csh

echo ""

read -p "Now Input the Workflow Number: " num

if [ x"$num" == x"" ]

then

echo "You Must Input the Workflow Number! Run 'copydump --help' to Get Usage"

echo ""

exit

else

export jira_num="$num"

fi

echo ""

read -p "Now Input Your SQLFile Directory( Default SQLFile is $local_dir/copysql.sql ): " dir

if [ x"$dir" == x"" ]

then

export sql_text=$local_dir/copysql.sql

else

export sql_text="$dir"

fi

echo ""

read -p "Now Input Copy Parallel Processes( Default Parallel is 4 ): " par

if [ x"$par" == x"" ]

then

export parallel=4

else

export parallel="$par"

fi

else

USAGE

fi

else

export sql_text=""

export source_database=""

export target_database=""

export source_ip=""

export target_ip=""

export source_hostuser=""

export target_hostuser=""

export source_dbuser=""

export target_dbuser=""

export source_port=""

export target_port=""

export source_dir=""

export target_dir=""

export jira_num=""

while getopts ds:dt:Ds:Dt:hs:ht:p:pa:pt:us:ut:Us:Ut:f:w OPTION ;

do

case "$OPTION" in

ds)     source_database="$OPTARG" ;;

dt)     target_database="$OPTARG" ;;

Ds)     source_dir="$OPTARG" ;;

Dt)     target_dir="$OPTARG" ;;

hs)     source_ip="$OPTARG" ;;

ht)     target_ip="$OPTARG" ;;

p)      source_port="$OPTARG" ;;

pa)                parallel="$OPTARG" ;;

pt)     target_port="$OPTARG" ;;

us)     source_dbuser="$OPTARG" ;;

ut)     target_dbuser="$OPTARG" ;;

Us)     source_hostuser="$OPTARG" ;;

Ut)     target_hostuser="$OPTARG" ;;

f)      sql_text="$OPTARG" ;;

w)      jira_num="$OPTARG" ;;

\?) #usage statement

USAGE;

;;

esac

done

if [ x"$source_database" == x"" ]

then

echo "-ds Source Database Name Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$target_database" == x"" ]

then

echo "-dt Target Database Name Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$source_dir" == x"" ]

then

echo "-Ds Source Outputfile Directory Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$target_dir" == x"" ]

then

echo "-Dt Target Outputfile Directory Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$source_ip" == x"" ]

then

echo "-hs Source Database Host Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$target_ip" == x"" ]

then

echo "-ht Target Database Host Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$parallel" == x"" ]

then

echo "-pa Target Database Parallel Default Value is 4 "

export parallel=4

else

export parallel="$parallel"

fi

if [ x"$source_port" == x"" ]

then

echo "-p Source Database Port Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$target_port" == x"" ]

then

echo "-pt Target Database Port Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$source_dbuser" == x"" ]

then

echo "-us Source Database Username Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$target_dbuser" == x"" ]

then

echo "-ut Target Database Username Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$source_hostuser" == x"" ]

then

echo "-Us Source Host Username Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$target_hostuser" == x"" ]

then

echo "-Ut Target Host Username Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$sql_text" == x"" ]

then

echo "-f Copy SQLFile Directory Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

if [ x"$jira_num" == x"" ]

then

echo "-w Workflow Number Must be Specified , Run 'copydump --help' to Get Usage"

echo ""

exit

fi

fi

#开始复制程序

echo '--------------------------------------------------------------------'

echo ""

echo 'Use ('$sql_text') Copy Data From ('$source_ip'):('$source_database') To ('$target_ip'):('$target_database')'

read -p "Do You Want To Continue ? Please Input (yes\no): " char

if [ "$char" == "yes" ]

then

echo ""

mkdir -p $local_dir/$jira_num

#copy源库数据到指定文件夹下

while read line

do

#获取表名

export table_nm=`echo  "$line" | awk '{print $4}'`

echo `date` > $local_dir/copy_error.log 2>&1

#判断查询脚本是否可执行

psql -d "$source_database" -p "$source_port" -h "$source_ip" -U "$source_dbuser" -c " copy ( ${line} limit 1 ) to stdout " >> $local_dir/copy_error.log 2>&1

if [ $? -eq 0 ]

then

echo $jira_num': Test Copy Table '$table_nm' Successfully ' >> $local_dir/copy.log

else

#不可执行抛出异常

echo `date` >> $local_dir/copy.log

echo $jira_num':Test Copy Table '$table_nm' With Error,Check /data1/csh/copy_error.log For More Information' >> $local_dir/copy.log

echo ""

echo '########################################################################################'

echo 'Copy Table '$table_nm' With Error !!! Cat '$local_dir'/copy_error.log For More Information'

echo '########################################################################################'

echo ""

exit

fi

done < $sql_text

if [ "$?" != 0 ]

then

exit

fi

#开并行

i=1

n=`cat "$sql_text" | wc -l`

if [ $n -lt $parallel ]

then

export parallel="$n"

fi

while [ $i -le $n ]

do

scopy()

{

line=`head -n $i $sql_text | tail -n 1`

typeset -l tab

tab="$line"

table_name=`echo  "$tab" | awk '{print $4}'`

echo `date` >> $local_dir/copy.log

echo $jira_num': Copy Table '$table_name' Start ' >> $local_dir/copy.log

psql -d $source_database -p $source_port -h $source_ip -U $source_dbuser -c " copy (${tab}) to stdout " | gzip > $local_dir/$jira_num/$table_name.gz

echo `date` >> $local_dir/copy.log

echo 'Copy Table '$table_name

echo $jira_num': Copy Table '$table_name' Successfully ' >> $local_dir/copy.log

}

m=1

while [ $m -le $parallel ]

do

scopy &

i=`expr $i + 1`

m=`expr $m + 1`

done

while [ 1 == 1 ]

do

copy_num=`ps -ef | grep -i copy | grep -v grep | wc -l`

if [ $copy_num -gt 2 ]

then

sleep 1

else

break

fi

done

done

wait

#while read name

#do

#typeset -l tab

#tab="$name"

#export table_name=`echo  "$tab" | awk '{print $4}'`

#echo `date` >> $local_dir/copy.log

#echo $jira_num': copy table '$table_name' start ' >> $local_dir/copy.log

#psql -d $source_database -p $source_port -h $source_ip -U $source_dbuser -c " copy (${tab}) to stdout " | gzip > $local_dir/$jira_num/$table_name.gz

#echo `date` >> $local_dir/copy.log

#echo 'copy table '$table_name

#echo $jira_num': copy table '$table_name' successfully ' >> $local_dir/copy.log

#done < $sql_text

#把导出的数据库文件传至58中间库

#echo ""

#echo 'Now Scp the Copy File to 192.168.5.58 !'

#echo '--------------------------------------------------------------------'

#echo ""

#scp -r $source_hostuser@$source_ip:$source_dir/$jira_num $local_dir

#if [ "$?" -eq 0 ]

#then

#        echo `date` >> $local_dir/copy.log

#        echo $jira_num': Copy File to 192.168.5.58 Start ' >> $local_dir/copy.log

#else

#        echo ""

#        echo 'scp file to 192.168.5.58 faild,check your password! and run this commond to continue: sh /tmp/scp_error/continue.sh' | tee -a $local_dir/copy.log

#        echo ""

#        exit

#fi

#echo `date` >> $local_dir/copy.log

#echo $jira_num': copy file to 192.168.5.58 end ' >> $local_dir/copy.log

#把导出的数据文件复制到目标库

echo ""

echo 'Now Scp The Copy File To '$target_ip' !'

echo '--------------------------------------------------------------------'

echo ""

smakdir(){

echo "#!/usr/bin/expect" > $local_dir/spawn_makdir.sh

echo "set password sgpadmin" >> $local_dir/spawn_makdir.sh

echo "spawn ssh $target_hostuser@$target_ip" >> $local_dir/spawn_makdir.sh

echo 'expect {' >> $local_dir/spawn_makdir.sh

echo '"*yes/no" { send "yes\r"; exp_continue}' >> $local_dir/spawn_makdir.sh

echo '"*password:" { send "$password\r" }' >> $local_dir/spawn_makdir.sh

echo '}' >> $local_dir/spawn_makdir.sh

echo 'expect "]$ "' >> $local_dir/spawn_makdir.sh

echo "send \"mkdir -p $target_dir/$jira_num\r\"" >> $local_dir/spawn_makdir.sh

echo 'send "exit\r"' >> $local_dir/spawn_makdir.sh

echo "expect eof" >> $local_dir/spawn_makdir.sh

chmod a+x $local_dir/spawn_makdir.sh

cd $local_dir

./spawn_makdir.sh

}

smakdir

i=1

n=`cat "$sql_text" | wc -l`

if [ $n -lt $parallel ]

then

export parallel="$n"

fi

while [ $i -le $n ]

do

sscp(){

echo "#!/usr/bin/expect" > $local_dir/spawn_scp$i.sh

echo "set password sgpadmin" >> $local_dir/spawn_scp$i.sh

echo "set timeout 100000000" >> $local_dir/spawn_scp$i.sh

echo "spawn scp $local_dir/$jira_num/$table_name.gz $target_hostuser@$target_ip:$target_dir/$jira_num" >> $local_dir/spawn_scp$i.sh

echo 'expect {' >> $local_dir/spawn_scp$i.sh

echo '"*yes/no" { send "yes\r"; exp_continue}' >> $local_dir/spawn_scp$i.sh

echo '"*password:" { send "$password\r" }' >> $local_dir/spawn_scp$i.sh

echo '}' >> $local_dir/spawn_scp$i.sh

echo "expect eof" >> $local_dir/spawn_scp$i.sh

chmod a+x $local_dir/spawn_scp$i.sh

cd $local_dir

./spawn_scp$i.sh

rm $local_dir/spawn_scp$i.sh

}

m=1

while [ $m -le $parallel ]

do

line=`head -n $i $sql_text | tail -n 1`

typeset -l tab

tab="$line"

table_name=`echo  "$tab" | awk '{print $4}'`

sscp &

i=`expr $i + 1`

m=`expr $m + 1`

done

while [ 1 == 1 ]

do

scp_num=`ps -ef | grep -i scp | grep -v grep | wc -l`

if [ $scp_num -gt 2 ]

then

sleep 1

else

break

fi

done

done

wait

if [ "$?" -eq 0 ]

then

echo `date` >> $local_dir/copy.log

echo $jira_num': Copy File To '$target_ip' Start ' >> $local_dir/copy.log

else

echo $jira_num': Copy File To '$target_ip' Error ' >> $local_dir/copy.log

mkdir -p /tmp/scp_error/

echo ""

echo 'Scp File To '$target_ip' Faild,Check Your Password! And Run This Commond To Continue: sh /tmp/scp_error/continue.sh' | tee -a $local_dir/copy.log

echo ""

exit

fi

echo `date` >> $local_dir/copy.log

echo $jira_num': Copy File To '$target_ip' End ' >> $local_dir/copy.log

#解压导出的数据文件

echo ""

echo 'Now Gunzip The Copy File !'

echo '--------------------------------------------------------------------'

echo ""

i=1

n=`cat "$sql_text" | wc -l`

if [ $n -lt $parallel ]

then

export parallel="$n"

fi

while [ $i -le $n ]

do

sgunzip(){

echo "#!/usr/bin/expect" > $local_dir/spawn_gunzip$i.sh

echo "set password sgpadmin" >> $local_dir/spawn_gunzip$i.sh

echo "spawn ssh $target_hostuser@$target_ip" >> $local_dir/spawn_gunzip$i.sh

echo 'expect {' >> $local_dir/spawn_gunzip$i.sh

echo '"*yes/no" { send "yes\r"; exp_continue}' >> $local_dir/spawn_gunzip$i.sh

echo '"*password:" { send "$password\r" }' >> $local_dir/spawn_gunzip$i.sh

echo '}' >> $local_dir/spawn_gunzip$i.sh

echo 'expect "]$ "' >> $local_dir/spawn_gunzip$i.sh

echo "send \"gunzip -f $target_dir/$jira_num/$table_name.gz\r\"" >> $local_dir/spawn_gunzip$i.sh

echo 'send "exit\r"' >> $local_dir/spawn_gunzip$i.sh

echo 'expect eof' >> $local_dir/spawn_gunzip$i.sh

chmod a+x $local_dir/spawn_gunzip$i.sh

cd $local_dir

./spawn_gunzip$i.sh

rm $local_dir/spawn_gunzip$i.sh

}

m=1

while [ $m -le $parallel ]

do

line=`head -n $i $sql_text | tail -n 1`

typeset -l tab

tab="$line"

table_name=`echo  "$tab" | awk '{print $4}'`

sgunzip &

i=`expr $i + 1`

m=`expr $m + 1`

done

while [ 1 == 1 ]

do

gunzip_num=`ps -ef | grep -i gunzip | grep -v grep | wc -l`

if [ $gunzip_num -gt 2 ]

then

sleep 1

else

break

fi

done

done

wait

if [ "$?" -eq 0 ]

then

echo `date` >> $local_dir/copy.log

echo $jira_num': '$target_ip' Gunzip File Start ' >> $local_dir/copy.log

else

echo $jira_num': Copy File To '$target_ip' Error ' >> $local_dir/copy.log

mkdir -p /tmp/gunzip_error/

echo ""

echo 'Gunzip File On '$target_ip' Faild,Check Your Password! And Run This Commond To Continue: sh /tmp/gunzip_error/continue.sh' | tee -a $local_dir/copy.log

echo ""

exit

fi

echo `date` >> $local_dir/copy.log

echo $jira_num': '$target_ip' Gunzip File End ' >> $local_dir/copy.log

#操作目标库导入数据

echo ""

echo 'Now Copy Data To '$target_ip':'$target_database

echo '--------------------------------------------------------------------'

echo ""

echo `date` >> $local_dir/copy.log

echo $jira_num': Copy Data To '$target_database' Start' >> $local_dir/copy.log

i=1

n=`cat "$sql_text" | wc -l`

if [ $n -lt $parallel ]

then

export parallel="$n"

fi

while [ $i -le $n ]

do

tcopy(){

LINE=`head -n $i $sql_text | tail -n 1`

typeset -l tab

tab="$LINE"

table=`echo  "$tab" | awk '{print $4}'`

where=`echo  "$tab" | awk '{print $5}'`

#判断是否全表导出

if [ x"$where" ==  x"where" ]

then

#不是全表,先拼接删除语句

export delete="${LINE/select \* from/delete from}"

echo `date` >> $local_dir/copy.log

echo $jira_num': '"$delete" >> $local_dir/copy.log

#删除数据

echo "$delete"

psql -d $target_database -h $target_ip -U $target_dbuser -p $target_port -c "$delete" 2>&1 | tee -a $local_dir/copy.log

#导入数据

echo `date` >> $local_dir/copy.log

export copy="copy $table from '$target_dir/$jira_num/$table'"

echo "$copy"

echo ""

echo $jira_num': '"$copy" >> $local_dir/copy.log

psql -d $target_database -h $target_ip -U $target_dbuser -p $target_port -c "$copy" 2>&1 | tee -a $local_dir/copy.log

#确认数据

#echo `date` >> $local_dir/copy.log

#export select="${LINE/select \* from/select count(1) from}"

#echo $jira_num': '"$select" >> $local_dir/copy.log

#psql -d $target_database -h $target_ip -U $target_dbuser -p $target_port -c "$select" 2>&1 >>  $local_dir/copy.log

#全表导出先truncate表

else

export truncate="truncate table $table"

echo `date` >> $local_dir/copy.log

echo "$truncate"

echo $jira_num': '"$truncate" >> $local_dir/copy.log

psql -d $target_database -h $target_ip -U $target_dbuser -p $target_port -c "$truncate" 2>&1 | tee -a $local_dir/copy.log

#导入数据

echo `date` >> $local_dir/copy.log

export copy="copy $table from '$target_dir/$jira_num/$table'"

echo "$copy"

echo ""

echo $jira_num': '"$copy" >> $local_dir/copy.log

psql -d $target_database -h $target_ip -U $target_dbuser -p $target_port -c "$copy" 2>&1 | tee -a $local_dir/copy.log

#确认数据

#echo `date` >> $local_dir/copy.log

#export select="${LINE/select \* from/select count(1) from}"

#echo $jira_num': '"$select" >> $local_dir/copy.log

#psql -d $target_database -h $target_ip -U $target_dbuser -p $target_port -c "$select" 2>&1 >> $local_dir/copy.log

fi

}

m=1

while [ $m -le $parallel ]

do

tcopy &

i=`expr $i + 1`

m=`expr $m + 1`

done

while [ 1 == 1 ]

do

copy_num=`ps -ef | grep -i copy | grep -v grep | wc -l`

if [ $copy_num -gt 2 ]

then

sleep 1

else

break

fi

done

done

wait

echo ""

echo '##########################################################'

echo 'Copy Data To '$target_ip $target_database' End'

echo '##########################################################'

echo ""

echo `date` >> $local_dir/copy.log

echo $jira_num': Copy Data To '$target_ip $target_database' End' >> $local_dir/copy.log

echo '----------------------------------------------------------' >> $local_dir/copy.log

echo "" >> $local_dir/copy.log

else

echo ""

echo '##########################################################'

echo 'Copydump End With Do Nothing , Check Your Parameter !'

echo '##########################################################'

echo ""

fi

greenplum 自动导数工具相关推荐

  1. js 刷新页面但是不闪烁_前端开发还在手动刷新页面?手把手教你搭建一个自动刷新工具...

    作为一名前端,开发web页面是我们的本职工作.在完成一个页面开发的过程中,保存代码然后手动刷新页面查看效果,这样的动作需要重复无数次,虽然一次这样的动作可能只要花费几秒钟的时间,但是次数多了也挺浪费时 ...

  2. iOS应用模块化的思考及落地方案(二)模块化自动构建工具的使用

    1.0 iOS模块化中的问题 前文已经介绍了模块化的流程及一些常见的问题,我们在这里再次总结一下. 在工作中,当我们开始一个新项目的时候,最先考虑的就是模块化工作. 模块化工作的想法是很美好的,可是执 ...

  3. 开源交互式自动标注工具EISeg

    在人工智能行业有这么一句话:"深度学习有多智能.背后就有多少人工".这句话直接说出了深度学习从业者心中的痛处,毕竟模型的好坏数据占着很大的因素,但是数据的标注成本却让很多从业者感到 ...

  4. 微软开源的自动机器学习工具上新了:NNI概览及新功能详解

    作者 | 宋驰 来源 | 微软研究院AI头条(ID: MSRAsia) 2018年9月,微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) ,目前已在 Gi ...

  5. 20120520 Linux下mysql的自动备份工具

    文章摘自:http://hi.baidu.com/vb98/blog/item/2ed90cea835fa4cfd439c97f.html linux下的MySQL自动备份工具-第二版2011-10- ...

  6. 开源!开源!我写的Anto.exe C#代码自动生成工具.欢迎下载。。

    在开发的过程中开发人员不得不经常要写很多重复的代码, 为了把精力放到更重要的方面去很多人为都做了N多努力,随便google一下自动生成工具, 你都会很容易得到很多这样的工具.园子就有好几款,其中李天平 ...

  7. python词云去除词_使用Python制作一个带GUI界面的词云自动生成工具(连载五)

    上一篇中我们介绍了自动生成词云工具(GUI)中数据清洗界面的实现过程(详解词云自动生成工具的数据清洗界面制作过程(连载四)),了解掌握了Grid.Pack混合布局的方法.本篇我们将讨论Python自动 ...

  8. WEP自动破解工具wesside-ng

    WEP自动破解工具wesside-ng wesside-ng是aircrack-ng套件提供的一个概念验证工具.该工具可以自动扫描无线网络,发现WEP加密的AP.然后,尝试关联该AP.关联成功后,它会 ...

  9. python代码规范 自动优化工具Black

    自动优化工具Black 在众多代码格式化工具中,Black算是比较新的一个,它***的特点是可配置项比较少,个人认为这对于新手来说是件好事,因为我们不必过多考虑如何设置Black,让 Black 自己 ...

最新文章

  1. 利用Attribute简化Unity框架IOC注入
  2. 5.5 准备创建bean
  3. 企业应用单svn与apache+svn配置整理
  4. python回测函数_Python事件化回测双均线
  5. java求两点坐标间的距离
  6. vs2015中提示未能找到类型或命名空间名Word
  7. javaGUI学习47:Swing-进度条、滑杆和分隔条
  8. EF Core 批量写入数据使用整理_EF Core批量插入数据(一)
  9. Mac全自动安装brew一键配置国内镜像源
  10. 关于以太坊 雷电网络 的思考
  11. 2017百度世界大会 | 爱奇艺创始人CEO龚宇演讲速记
  12. WIN10 LTSC 安装EDGE和微软应用商店
  13. dcp9020cdn可以打印a3纸吗_印品质量 细节对比_兄弟 9020CDN_办公打印评测试用-中关村在线...
  14. Springboot实现过滤器
  15. yum配置文件 重启后还原_电脑里重启后,重启前所有设置都还原到以前了,怎么办啊...
  16. 2019杭电多校第七场 HDU - 6656 Kejin Player 期望
  17. Linux--装好之后要做的几件事(转)
  18. Linux 中查看网卡是否启用
  19. 提示计算机类型不匹配啥意思,提示:运行时错误“13”:类型不匹配。是什么意思刚装好...
  20. python中文乱码总结

热门文章

  1. 2017 续办上海居住证和积分办理流程
  2. 台式计算机售后行业标准,电脑“三包”还有待行业规范及相关法规出台
  3. 他居然发邮件请我去吃饭——邮件伪造那些事儿
  4. 人力资源管理专业知识与实务(初级)【13】
  5. iOS通知和KVO的区别和用法
  6. 传统算法与神经网络算法,神经网络与算法的关系
  7. Pcap文件转化成Pcd文件
  8. 什么是网管软件?网管平台软件
  9. 字符设备驱动文件初始化与卸载(s5pv210/tiny210)
  10. 如何很好的解决网站劫持?