Thông báo lỗi tôi nhận đượcliệu cắt ngắn cho cột 'url' ở hàng 1 - Lỗi với lập trình với 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
Điều đầu tiên tôi được kiểm tra là nếu chuỗi URL dài hơn chiều dài lĩnh vực nhưng thực sự ngắn hơn nhiều. Cơ sở dữ liệu Thiết kế
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| myurlcol | CREATE DATABASE `myurlcol` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
Table 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;
tôi in ra độ dài của dữ liệu tôi đang cố gắng để chèn vào bảng (Tôi đang thử nghiệm chỉ sử dụng một URL):
len(url) = 89
len(md5) = 32
len(host) = 20
len(content_sha1) = 40
len(add_date) = 19
Tôi đã sử dụng con trỏ được tạo bởi Django.db.connection. Để có nhiều thông tin hơn, tôi dán lệnh truy vấn cơ sở dữ liệu hoàn chỉnh tôi truyền cho cursor.execute()
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';
Điều buồn cười là, lệnh trên hoạt động khi tôi sao chép và dán vào dòng lệnh MySQL. Không có thông báo lỗi và dữ liệu vừa được chèn chính xác.
Điều gì đang xảy ra?
Đó là cảnh báo chứ không phải lỗi. –
@Secator nó có thể là một cảnh báo MySQL, nhưng nó trở về như một lỗi Python. Tôi đoán bạn không thể thấy điều đó cho đến khi chỉnh sửa, điều này làm rõ điều đó. – Jordan
Cảm ơn bạn đã để lại bình luận, nhưng đây là câu hỏi của tôi: (1) làm thế nào để loại bỏ những cảnh báo này. (2) nếu tôi phải giữ chúng, làm thế nào để bỏ qua chúng và để dữ liệu được ghi vào cơ sở dữ liệu. Ngay bây giờ, dữ liệu không được ghi vào cơ sở dữ liệu. – fanchyna