2017-03-26 3 views
0

Ich habe einen seltsamen Fehler beim Drucken von meiner Datenbank, unsicher, ob das Problem wegen Python-Decodierung oder anders ist. Ich habe versucht, sys.stdout.write mit (‚‘), die ähnliche Ausgangs ProblemePython-Druck-Funktion mit mysqlcursor überschreiben erstes Zeichen

hat

* update 1 Powershell hat gleiche Leistung und hat Fenstergröße variiert keine Wirkung http://imgur.com/a/eWnpP

* Update 2 Lösung gefunden: das Hinzufügen Feld .decode(). Streifen() anstelle von field.decode() entfernt '/ r' Charakter

Danke @tdelaney

-Code

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:]) 

Datenbanktabelle

alle Felder sind 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>

Ausgabe

Die Ausgabe auf Befehlszeile in Windows wenn das einen Unterschied macht gezeigt wurde

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 

Wie Sie in der vorletzten Zeile sehen können, wurde das erste Zeichen durch das '|' Charakter. Ist das schon mal jemand begegnet?

+0

Sind Sie sicher, dass dies nicht Ihre Eingabeaufforderung ist? Versuchen Sie, das Skript in PowerShell auszuführen und das Fenster größer zu machen. – Blender

+0

Powershell hat die gleiche Ausgabe. http://imgur.com/a/eWnpP – nuzzz

+0

Vielleicht ist da ein seltsames Zeichen wie ein \ r drin. Zum Debuggen ändern Sie es in 'repr (field.decode())' - Sie haben dort zusätzliche Anführungszeichen, sehen aber ungerade Zeichen. – tdelaney

Antwort

0

In Standardterminals Das Zeichen \r verschiebt den Einfügepunkt zurück zum Anfang der aktuellen Zeile. Wenn die Vorderseite Ihrer Linie überschrieben wird, besteht eine gute Chance, dass die Schuldige Partei wird.

Die Ursache IMHO ist, dass die Daten nicht ordnungsgemäß bereinigt wurden, wenn sie in die Datenbank eingegeben wurden. Wenn Sie die DB selbst nicht bereinigen können, besteht die Lösung darin, bei jeder Verwendung zu scrubben.

Verwandte Themen