Python打印函数使用mysqlcursor覆盖第一个字符

时间:2017-03-26 02:24:17

标签: python mysql command-prompt

从数据库打印时遇到一个奇怪的错误,不确定问题是由python解码引起的还是其他问题。我尝试使用sys.stdout.write('。'),它有类似的输出问题

*更新1 Powershell具有相同的输出,并且不同的窗口大小无效http://imgur.com/a/eWnpP

*更新2 找到的解决方案:添加field.decode()。strip()而不是field.decode()删除'/ r'字符

谢谢@tdelaney

代码

import mysql.connector
import sys
import os
import sys
from datetime import datetime

#################################

# Database settings

hostname = "localhost"
username = "root"
password = "---------"
database = "weatherdb"
port = 3306

# arguments
csvFile = ""
tableName =""

#################################

# Simple routine to run a query on a database and print the results:
def doQuery(conn):
    cur = conn.cursor()

    cur.execute( "SELECT * FROM weather_record" )
    count = 0
    for row in cur:
        res = ""
        for field in row:
            res = res + str(field.decode())+ "|"  # line in question
            print(res)               
        res = res + "\n"

#################################
# Get user arguments
def main(argv):
    if(len(sys.argv)== 3):
        # correct number of arguments
        pw = sys.argv[2]
        csvFile = sys.argv[1]
        loadToDB()
    else:
        # incorrect number of arguments
        currentFileName = os.path.basename(__file__)
        print(f"usage {currentFileName} inputfile.csv tableName")
        sys.exit(2)


#################################

print("Using mysql.connector…")
myConnection = mysql.connector.connect(host=hostname, user=username, port=port, passwd=password, db=database)
doQuery(myConnection)
myConnection.close()

#################################

# Run main function on script start
if __name__ == "__main__":
    main(sys.argv[1:])

数据库表

所有字段均为 varchar

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
  <head>
    <title>weather_record</title>
    <meta name="GENERATOR" content="HeidiSQL 9.4.0.5125">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
      thead tr {background-color: ActiveCaption; color: CaptionText;}
      th, td {vertical-align: top; font-family: "Tahoma", Arial, Helvetica, sans-serif; font-size: 10pt; padding: 3px; }
      table, td {border: 1px solid silver;}
      table {border-collapse: collapse;}
      thead .col0 {width: 101px;}
      thead .col1 {width: 82px;}
      thead .col2 {width: 85px;}
      thead .col3 {width: 67px;}
      thead .col4 {width: 85px;}
      thead .col5 {width: 78px;}
      thead .col6 {width: 122px;}
      thead .col7 {width: 142px;}
      thead .col8 {width: 135px;}
      thead .col9 {width: 86px;}
      thead .col10 {width: 102px;}
      thead .col11 {width: 118px;}
      thead .col12 {width: 98px;}
      thead .col13 {width: 118px;}
      thead .col14 {width: 119px;}
      thead .col15 {width: 86px;}
      thead .col16 {width: 102px;}
      thead .col17 {width: 118px;}
      thead .col18 {width: 98px;}
      thead .col19 {width: 118px;}
      thead .col20 {width: 119px;}
    </style>
  </head>

  <body>

    <table caption="weather_record (27 rows)">
      <thead>
        <tr>
          <th class="col0">date</th>
          <th class="col1">minTemp</th>
          <th class="col2">maxTemp</th>
          <th class="col3">rainfall</th>
          <th class="col4">evaporation</th>
          <th class="col5">sunshine</th>
          <th class="col6">maxWindGustDir</th>
          <th class="col7">maxWindGustSpeed</th>
          <th class="col8">maxWindGustTime</th>
          <th class="col9">9amTemp</th>
          <th class="col10">9amHumidity</th>
          <th class="col11">9amCloudCover</th>
          <th class="col12">9amWindDir</th>
          <th class="col13">9amWindSpeed</th>
          <th class="col14">9amAirPressure</th>
          <th class="col15">3pmTemp</th>
          <th class="col16">3pmHumidity</th>
          <th class="col17">3pmCloudCover</th>
          <th class="col18">3pmWindDir</th>
          <th class="col19">3pmWindSpeed</th>
          <th class="col20">3pmAirPressure</th>
        </tr>
      </thead>
      <tbody>

<td>
        </tr>
        <tr>
          <td class="col0">2017-02-28</td>
          <td class="col1">10.9</td>
          <td class="col2">33.3</td>
          <td class="col3">0</td>
          <td class="col4"></td>
          <td class="col5"></td>
          <td class="col6">N</td>
          <td class="col7">30</td>
          <td class="col8">09:24</td>
          <td class="col9">21.2</td>
          <td class="col10">66</td>
          <td class="col11"></td>
          <td class="col12">SE</td>
          <td class="col13">7</td>
          <td class="col14">1022.3</td>
          <td class="col15">32.1</td>
          <td class="col16">22</td>
          <td class="col17"></td>
          <td class="col18">NNE</td>
          <td class="col19">9</td>
          <td class="col20">1019.9
</td>
        </tr>
      </tbody>
    </table
  </body>
</html>

输出

如果产生差异

,则输出显示在Windows 的命令行中
C:\Python>python csvToDb.py
Using mysql.connector…
2017-02-28|
2017-02-28|10.9|
2017-02-28|10.9|33.3|
2017-02-28|10.9|33.3|0|
2017-02-28|10.9|33.3|0||
2017-02-28|10.9|33.3|0|||
2017-02-28|10.9|33.3|0|||N|
2017-02-28|10.9|33.3|0|||N|30|
2017-02-28|10.9|33.3|0|||N|30|09:24|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22||
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22||NNE|
2017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22||NNE|9|
|017-02-28|10.9|33.3|0|||N|30|09:24|21.2|66||SE|7|1022.3|32.1|22||NNE|9|1019.9
usage csvToDb.py inputfile.csv tableName

正如您在第二行中看到的那样,第一个字符已被“|”覆盖字符。有没有人遇到过这个?

1 个答案:

答案 0 :(得分:0)

在标准终端中\r字符将插入点移回当前行的开头。如果你的队伍正面被覆盖,很有可能是有罪的一方。

根本原因恕我直言,数据在放入数据库时​​未被正确清理。如果您无法清理数据库本身,解决方案是每次使用时都要进行清理。