Почему я получаю этот сбой и почему mysql имеет значение false? - PullRequest
0 голосов
/ 02 июня 2019

Я хотел поместить эти данные в базу данных, но вставка не удалась, возможно, из-за неправильной инструкции.

python3.6

# -*- coding: utf-8 -*-

import pymysql

tup = ('222.72.166.235:53281', '上海', '高匿', 'HTTPS')
name = tup[0]
ip_list = tup[0].split(':')
ip = ip_list[0]
port = ip_list[1]
location = tup[1]
anonymity = tup[2]
protocol = tup[3]
#instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', ".format(name, ip, port, location, anonymity, protocol)
db_test = pymysql.connect('localhost', 'root', '123456', "test")
cursor = db_test.cursor()
sql = "INSERT INTO public_proxy(name, ip, port, location, anonymity, protocol) VALUES('%s', '%s',  '%s',  '%s',  '%s', '%s')" % (name, ip, port, location, anonymity, protocol)
try:
    cursor.execute(sql)
    db_test.commit()
    print('数据插入成功...')  
except:
    db_test.rollback()
    print('错误')
db_test.close()

Я надеюсь, что результат 'print ('数据 插入 成功 ...') '

错误
[Finished in 0.4s]

[введите описание изображения здесь] [1]

Это таблица структуры базы данных.

mysql> desc public_proxy;
+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name        | varchar(25)      | NO   |     | NULL    |                |
| ip          | varchar(20)      | NO   |     | NULL    |                |
| port        | varchar(10)      | NO   |     | NULL    |                |
| location    | varchar(50)      | NO   |     | NULL    |                |
| anonymity   | tinyint(3)       | NO   |     | NULL    |                |
| protocol    | tinyint(3)       | NO   |     | NULL    |                |
| source      | varchar(25)      | NO   |     | NULL    |                |
| create_time | datetime         | YES  |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Первоначально была проблема с введенным значением, но теперь я внес изменение, и оно успешно.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pymysql

tup = ('222.72.166.235:53281', '上海', '高匿', 'HTTPS')
name = tup[0]
ip_list = tup[0].split(':')
ip = ip_list[0]
port = ip_list[1]
location = tup[1]
anonymity = tup[2]
protocol = tup[3]
source = 'xici'

if anonymity == '透明':
    anonymity = 0
elif anonymity == '高匿':
    anonymity = 1
elif anonymity == '':
    anonymity =2
else:
    anonymity = 3

if protocol == 'HTTP':
    protocol = 0
elif protocol == 'HTTPS':
    protocol = 1
elif protocol == '':
    protocol = 2
else:
    protocol = 3
#instr = "'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', ".format(name, ip, prot, location, anonymity, protocol)
db_test = pymysql.connect('localhost', 'root', '123456', "test")
cursor = db_test.cursor()
sql = "INSERT INTO public_proxy(name, ip, port, location, anonymity, protocol, source) VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (name, ip, port, location, anonymity, protocol, source)
try:
    cursor.execute(sql)
    db_test.commit()
    print('数据插入成功...')  
except Exception as e:
    db_test.rollback()
    print('错误')
    print("{0}: {1!r}".format(type(e).__name__, e.args))

db_test.close()

результат:

数据插入成功...

thx, мойдруг.

0 голосов
/ 02 июня 2019

Вы должны всегда проверять исключение, когда перехватываете его в блоке except.Он даст вам подсказки о природе исключения и конкретное сообщение об ошибке.

Я пытался протестировать ваш скрипт, но я изменил обработчик исключения следующим образом:

except Exception as e:
    db_test.rollback()
    print('错误')
    print("{0}: {1!r}".format(type(e).__name__, e.args))

Iполучил такой вывод:

错误
ProgrammingError: (1146, u"Table 'test.public_proxy' doesn't exist")

Это ожидается в моей среде, потому что я не создавал таблицу до того, как запустил этот скрипт.

В вашем случае причина исключения может быть иной.

Дело в том, что вы должны изучить информацию в исключении, иначе вы не сможете узнать причину.


Ваш комментарий:

Ошибка указывает на то, что вы пытаетесь сохранить строку в целочисленный столбец, а MySQL не преобразует ее.

Вы должны использовать числовое значениезначение. * * тысяча двадцать-одна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...