免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2820 | 回复: 7
打印 上一主题 下一主题

自己写的一个数据导出工具,大家给点介意,,, [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-28 17:15 |只看该作者 |倒序浏览
想弄好一点,但是资料查了一大堆,没找到自己想要的,就这么用原来的东西写了一个工具,不算太通用但是还行,就是先列出你本机能用的DBD,然后就是通用的链接数据库,选择sql执行方式,然后将查询结果输出到一个指定的文件里。程序有点傻,没进行很好的处理,也算个成果把,
  1. #!/usr/bin/perl
  2. #sql命令行操作工具;
  3. use DBI;
  4. use strict;

  5. #打印版本头部
  6. $~="my_version";
  7. write;

  8. format my_version=
  9. ========================================
  10. sql_tool cmdline version 1.0
  11. ========================================
  12. .

  13. #选择你可以用的perl的DBD的数据库驱动
  14. print"your system support these database\n";
  15. my $choice=0;
  16. my @driverlist=DBI->available_drivers;
  17. foreach my $list (@driverlist) {
  18.         print "\t$choice:$list\n";
  19.         $choice++;
  20. }
  21. print"please select a perl support driver in your machine:";
  22. my $num=<STDIN>;
  23. chop $num;
  24. my $driver_use=$driverlist[$num];
  25. #输入链接的数据库/地址/端口
  26. print "what database do you want to use?\n";
  27. my $database=<STDIN>;
  28. chop $database;
  29. print "hostaddr:";
  30. my $host=<STDIN>;
  31. chop $host;
  32. print "port_use:";
  33. my  $port=<STDIN>;
  34. chop $port;

  35. my $dsn="DBI:".$driver_use.":database=".$database.";host=".$host.";port=".$port;
  36. print "$dsn\n";
  37. #输入用户名和密码
  38. print "database user:";
  39. my $user=<STDIN>;
  40. chop $user;
  41. #隐藏输入明文值
  42. system "stty -echo";
  43. print "password:";
  44. my $password=<STDIN>;
  45. chop $password;
  46. system "stty echo";
  47. #链接数据库
  48. my $dbh=DBI->connect($dsn,$user,$password,{PrintError=>0,AutoCommit=>0}) or die "connect is error ,please check your host or password correctly,otherwise change your port!\nthe bad error is your give a uncorrect database\n";

  49. #选择sql语句执行方式
  50. print "sql from 1.cmdline 2.file(selecting):";
  51. my $sel_input=<STDIN>;
  52. chop $sel_input;
  53. my $sql;
  54. if($sel_input==1){
  55.     print "\n sql=";
  56.     $sql=<STDIN>;
  57.     chop $sql;
  58. }elsif($sel_input==2){
  59.       print"\nsql_file name:";
  60. my $sql_file=<STDIN>;
  61. chop $sql_file;
  62.          open(SQL_FILE,$sql_file);
  63.          $sql=<SQL_FILE>;
  64.          chop $sql;
  65.          close (SQL_FILE);
  66.         }else{
  67. print "\n\tan error choice!\n";
  68.                 }

  69. #预编译sql
  70. my $sth=$dbh->prepare($sql) or die $dbh->errstr;
  71. #运行sql
  72. $sth->execute or die"can't execute sql statement:$DBI::errstr\n";
  73. print "give a output file name:";
  74. my $output=<STDIN>;
  75. chop $output;
  76. open(OUT,">>$output") or die"create file $output failed!\n";
  77. #接受结果
  78. my @row;
  79. my $num;
  80. while(@row=$sth->fetchrow_array()){

  81.           $num=@row;
  82.            foreach my $line(@row){
  83.                 print OUT ("$line\t\t");

  84.         }
  85.          print OUT ("\n");

  86. }
  87. close(OUT);
















复制代码

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
2 [报告]
发表于 2011-05-28 19:58 |只看该作者
>perlcritic 1.pl
Bareword file handle opened at line 67, column 4.  See pages 202,204 of PBP.  (Severity: 5)
Two-argument "open" used at line 67, column 4.  See page 207 of PBP.  (Severity: 5)
Bareword file handle opened at line 82, column 1.  See pages 202,204 of PBP.  (Severity: 5)
Two-argument "open" used at line 82, column 1.  See page 207 of PBP.  (Severity: 5)

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2011-05-28 20:15 |只看该作者
上次见楼主还不用 strict 这次就这么牛了已经。不过写成交互环境不利于自动化啊,前70行都可以通过命令行参数配置 Getopt::Long

论坛徽章:
0
4 [报告]
发表于 2011-05-28 20:28 |只看该作者
其实用不用strict,要看写多少东西,小片段,一般我不用那个西东,写东西不多,谢谢指点,关于DBI有的东西没有深看,关键是没有实战环境,偶尔碰到问题,懒了就用用,真希望能有一个锻炼的机会啊。

论坛徽章:
0
5 [报告]
发表于 2011-05-28 20:29 |只看该作者
还有就是perl自动化那本书,全英文啃了一个多月,发现linux基础不是很好,觉得遗憾~~~,

论坛徽章:
0
6 [报告]
发表于 2011-05-28 20:31 |只看该作者
回复 2# ttcn_cu


    又见到好东西了,谢谢指点,我回去好好反省一下。哈哈

论坛徽章:
0
7 [报告]
发表于 2011-05-29 09:17 |只看该作者
多写多练 很好。
数据库是Mysql的话,mysqldump已经很好,支持-where条件查询。
或者mysql命令自身也无所不能:

mysql -uroot -e 'select count(*) from login'
+----------+
| count(*) |
+----------+
|     9937 |
+----------+

论坛徽章:
0
8 [报告]
发表于 2011-05-29 09:20 |只看该作者
Perl是胶水,需要掌握OS相关平台技术,才能把Perl的水平提高到一个更进一步的高度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP