Ich bin ziemlich neu zu Python und MySql zu. Ich versuche, Daten, die in Excel-Dateien empfangen werden, mit Python in MySql zu importieren. Das Skript läuft ruhig in Ordnung, aber ich habe einen einfachen Auswahlteil, der nicht richtig funktioniert. Es wird versucht, Daten aus einer einzigen Tabelle abzurufen, die die bereits importierten Dateinamen nach Dateitypen geordnet speichert. Die Tabelle hat also diese zwei Spalten und einige hundert Zeilen.sql Alchemie Abfrage stucked je nach Wert
CREATE TABLE `imp_doc` (
`docname` varchar(50) NOT NULL,
`doc_type` varchar(12) DEFAULT NULL,
PRIMARY KEY (`docname`),
KEY `doctype` (`doc_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Das Skript läuft mit allen "Dateitypen", bis auf einen. Wenn dieser als Wert an die Auswahl gesendet wird, bleibt das Skript ohne Fehlermeldung stehen.
Das Skript mit dem Parameter "doc_type" auf "ibot" gesetzt, was es zum Stillstand bringt!
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.pool import NullPool
engine = create_engine('mysql+mysqlconnector://userid:[email protected]:3306/mydb', poolclass = NullPool)
engine.echo = True
conn = engine.connect()
saved_list =[]
doc_type="ibot"
query = "SELECT docname FROM imp_doc WHERE doc_type = %s"
cur=conn.execute(query, (doc_type,))
for (docname) in cur:
dn=docname[0]
dn=unicode.encode(dn,'cp1252')
saved_list.append(str(dn))
print saved_list
cur.close()
Das Ergebnis scheint es, Python für resultiert aus MySql wartet, aber in der db die Verbindung in „Schlaf“ ist.
2016-12-28 14:18:15,407 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2016-12-28 14:18:15,407 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:18:15,598 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2016-12-28 14:18:15,598 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:18:15,987 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2016-12-28 14:18:15,997 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:18:16,187 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2016-12-28 14:18:16,187 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:18:16,747 INFO sqlalchemy.engine.base.Engine SELECT docname FROM imp_doc WHERE doc_type = %s
2016-12-28 14:18:16,757 INFO sqlalchemy.engine.base.Engine ('ibot',)
Wenn ich den gleichen Code mit anderen DOC_TYPE Wert laufen funktioniert es perfekt:
2016-12-28 14:31:45,105 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2016-12-28 14:31:45,105 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:31:45,306 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2016-12-28 14:31:45,306 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:31:45,727 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
2016-12-28 14:31:45,727 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:31:45,947 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
2016-12-28 14:31:45,957 INFO sqlalchemy.engine.base.Engine {}
2016-12-28 14:31:46,507 INFO sqlalchemy.engine.base.Engine SELECT docname FROM imp_doc WHERE doc_type = %s
2016-12-28 14:31:46,507 INFO sqlalchemy.engine.base.Engine ('wiz',)
['WIZARD_2015-W1001-20160102.xlsx', 'WIZARD_2016-W0104-20160612.xlsx', 'WIZARD_2016-W16.xlsx', 'WIZARD_2016-W17.xlsx', 'WIZARD_2016-W18.xlsx', 'WIZARD_2016-W19.xlsx', 'WIZARD_2016-W20.xlsx', 'WIZARD_2016-W21.xlsx', 'WIZARD_2016-W22.xlsx', 'WIZARD_2016-W23.xlsx', 'WIZARD_2016-W24.xlsx', 'WIZARD_2016-W25.xlsx', 'WIZARD_2016-W26.xlsx', 'WIZARD_2016-W27.xlsx', 'WIZARD_2016-W28.xlsx', 'WIZARD_2016-W29.xlsx', 'WIZARD_2016-W30.xlsx', 'WIZARD_2016-W31.xlsx', 'WIZARD_2016-W32.xlsx', 'WIZARD_2016-W33.xlsx', 'WIZARD_2016-W34.xlsx', 'WIZARD_2016-W35.xlsx', 'WIZARD_2016-W36.xlsx', 'WIZARD_2016-W37.xlsx', 'WIZARD_2016-W38.xlsx', 'WIZARD_2016-W39.xlsx', 'WIZARD_2016-W40.xlsx', 'WIZARD_2016-W41.xlsx', 'WIZARD_2016-W42.xlsx', 'WIZARD_2016-W43.xlsx', 'WIZARD_2016-W44.xlsx', 'WIZARD_2016-W45.xlsx', 'WIZARD_2016-W46.xlsx', 'WIZARD_2016-W47.xlsx', 'WIZARD_2016-W48.xlsx', 'WIZARD_2016-W49.xlsx', 'WIZARD_2016-W50.xlsx']
die Auswahl in MySql Lauf funktioniert natürlich auch:
docname doc_type
Hotspot Detail 2.0 iBot_20161226.xlsx ibot
Hotspot Detail 2.0 iBot_20161225.xlsx ibot
Hotspot Detail 2.0 iBot_20161224.xlsx ibot
20161226 def.xlsx def
20161225 def.xlsx def
20161224 def.xlsx def
20161223 def.xlsx def
Ich bin sicher, dass die Problem ist nicht der Wert des Parameters, aber bitte geben Sie mir etwas Hilfe, um zu verstehen, warum die selbe Auswahl manchmal funktioniert und in anderen Fällen nicht funktioniert. Danke
Ein weiterer Kommentar. Es scheint, das Problem tritt auf, wenn die Ergebniswerte Speicherplatz im Docname enthalten! Beim Ausführen des Skripts mit –
funktioniert diese Änderung, liefert aber natürlich nicht das erforderliche Ergebnis: query = "SELECT ersetzen (docname, '', '_') FROM imp_doc WHERE doc_type =% s" –
Die Replace-Funktion löste sich nicht vollständig das Problem. Wenn ich die Leerzeichen durch andere Zeichen als "_" ersetze, bekomme ich ein anderes Verhalten !!! Dies scheint sehr beängstigend und macht den ganzen Code unzuverlässig. Sogar die Verwendung von ORM anstelle von Text-SQL ergibt ein ähnliches Verhalten. Das Problem scheint mit dem "mysqlconnector" verbunden zu sein. Ersetzen Sie das mit "pymysql" scheint eine Problemumgehung zur Verfügung gestellt, aber das ursprüngliche Problem bleibt. –