Die Fehlermeldung, die ich bekam, warabgeschnitten Daten für Spalte ‚url‘ in Zeile 1 - Fehler bei der Programmierung mit Python Django
Traceback (most recent call last):
File "./test.py", line 416, in <module>
startup()
File "./test.py", line 275, in startup
writer.save(r,data)
File "/home/user/project/test/output.py", line 91, in save
self.save_doc(r, data, pid)
File "/home/user/project/test/output.py", line 130, in save_doc
cursor.execute(dbquery)
File "/usr/local/lib/python2.6/site-packages/django/db/backends/util.py", line 34, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 86, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python2.6/site-packages/MySQL_python-1.2.3c1-py2.6-linux-x86_64.egg/MySQLdb/cursors.py", line 175, in execute
File "/usr/local/lib/python2.6/site-packages/MySQL_python-1.2.3c1-py2.6-linux-x86_64.egg/MySQLdb/cursors.py", line 89, in _warning_check
_mysql_exceptions.Warning: Data truncated for column 'url' at row 1
Das erste, was ich war die Überprüfung, wenn die URL-Zeichenfolge ist länger als die Feldlänge , aber es ist tatsächlich viel kürzer. Datenbank-Design
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| myurlcol | CREATE DATABASE `myurlcol` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
Tisch Design
CREATE TABLE `document` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(255) collate utf8_bin NOT NULL,
`md5` varchar(32) collate utf8_bin NOT NULL,
`host` varchar(255) collate utf8_bin default NULL,
`content_sha1` varchar(40) collate utf8_bin NOT NULL,
`add_date` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`),
UNIQUE KEY `md5` (`md5`),
KEY `main_crawl_document_content_sha1` (`content_sha1`),
KEY `main_crawl_document_discover_date` (`add_date`),
KEY `main_crawl_document_host` (`host`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
ich die die Längen der Daten auszudrucken ich in die Tabelle einzufügen versuchen (Ich teste nur eine URL):
len(url) = 89
len(md5) = 32
len(host) = 20
len(content_sha1) = 40
len(add_date) = 19
Ich benutzte einen Cursor von Django.db.connection erstellt. Um informative, füge ich den kompletten Datenbank-Abfragebefehl I cursor.execute()
geben
INSERT INTO main_document SET url='ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/0a/39/Arthritis_Res_2000_Jun_5_2%284%29_315-326.tar.gz',md5='b6ba3adde8de87e4dc255092b04d07ea',host='ftp.ncbi.nlm.nih.gov',content_sha1='9aeab4412cc9b1add84a6d2bca574664e193b56e',add_date='2012-05-15 00:00:00';
Das Komische ist, dass der Befehl oben funktioniert, wenn ich kopiere und mit der MySQL-Kommandozeile eingefügt. Keine Fehlermeldungen und die Daten werden nur korrekt eingefügt.
Was läuft falsch?
Es ist eine Warnung, kein Fehler. –
@Secator es könnte eine MySQL-Warnung sein, aber es kommt als Python-Fehler zurück. Ich nehme an, du konntest das erst beim Editieren sehen, was das aufräumt. – Jordan
Vielen Dank für Ihre Kommentare, aber hier sind meine Fragen: (1) wie Sie diese Warnungen entfernen. (2) wenn ich sie behalten muss, wie man sie ignoriert und die Daten in die Datenbank schreibt. Momentan werden die Daten nicht in die Datenbank geschrieben. – fanchyna