Python操作mysql,怎么样判断输入的值在数据表中是不是存在

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python操作mysql,怎么样判断输入的值在数据表中是不是存在相关的知识,希望对你有一定的参考价值。

如有一张表userinfo,表中有字段id、name、pwd、mail,现在values分别有(1,a,a,a@123.com),(2,b,b,b@234.com),(3,c,c,c@345.com),如果我再输入a或b或c向表中插入时就报错,输入(4,d,d,d@678.com)就可以插入成功,怎么写一个判断?
我现在写出的判断不知怎么都是针对最后一条的,输入d就报错,输入a或b还是可能插入成功的,取表中数据是这样写的
results=cur.fetchall() ##查询返回的结果值
for row in results:
SelUNameVal=row[1]
Spwd=row[2]
Smail=row[3]

你获取的操作是正确的,做比较判断即可啦。(尝试:使用一条sql语句在数据库中判断时间是否存在,返回py时得到的就是0或1,判断语句来看比较简洁。当然得看执行后两种方法的执行时间!!)追问

NewInVal=gui.UserNameEntry.get()
if NewInVal=='':.... ##调用抛错信息的方法
elif NewInVal == dbSel.SelUNameVal ////
else:db.InUserInfo() .... ##对前两条记录不起作用,表中有三条数据,在重复插入第三条时会报错,重复前两条还是成功

追答

if NewInVal=='': 这个语句是没错的,贴出报错信息看看(你这些没有前后上下文的方法,我很难理解,也只能凭感觉去猜想它是干嘛的)

参考技术A 谁都以为自己会是例外——在后悔之外。谁都以为拥有的感情也是例外——在变淡之外。谁都以为恋爱的对象刚巧也是例外——在改变之外。然而最终发现——除了变化,无一例外。 参考技术B 免它惊,免它扰,免它四下流离 参考技术C 玲珑骰子安红豆,入骨相思君知否 参考技术D 如果不依赖数据库本身,写入之前查询有没有不就行了?

没有足够的值在 Python 中解包

【中文标题】没有足够的值在 Python 中解包【英文标题】:Not enough values to unpack in Python 【发布时间】:2018-08-25 11:48:28 【问题描述】:

我试图让用户在 Python 中操作列表。

number_of_commands = int(input())
x = 0
my_list = []
while x <= number_of_commands:
    command, i, e = input().split(' ')
    command = str(command)
    i = int(i)
    e = int(e)
    x = x + 1

    if command == 'insert':
        my_list.insert(i, e)
    elif command == 'print':
        print(my_list)
    elif command == 'remove':
        my_list.remove(e)
    elif command == 'append':
        my_list.append(e)
    elif command == 'sort':
        my_list.sort()
    elif command == 'pop':
        my_list.pop()
    elif command == 'reverse':
        my_list.reverse()
    else:
        print("goodbye")

当用户输入需要两个整数的命令(例如insert)时,程序可以运行,但是当用户输入print 之类的内容时,我收到错误“没有足够的值来解压”。仅当您将其输入为 print 0 0 时才有效。如何允许用户输入带整数和不带整数的命令?

【问题讨论】:

看看Python的内置range函数。根据定义,知道迭代次数的循环更适合for 循环而不是whilefor x in range(number_of_comands): 将允许您同时删除 x = 0x = x + 1 行。另外x = x + 1 通常写成x += 1 【参考方案1】:

你可以使用

command, *values = input().split(' ')

values 是一个列表。例如“插入”部分变为:

if command == 'insert':
    my_list.insert(int(values[0]), int(values[1]))

【讨论】:

如果有人想知道那颗星:***.com/questions/400739/…【参考方案2】:
def my_function(command='print', i=0, e=0):
    # your function code here

user_input = input().split(' ')
if len(user_input) > 3:
    print('usage : function i e')
else:
    my_function(*user_input)

在列表将列表转换为函数的参数之前使用*

使用函数是一种很好的方式来获得默认值,以防它们未定义。

【讨论】:

【参考方案3】:

这里是拆包的地方:

command, i, e = input().split(' ')

仅输入“print”将不允许此行正确执行,因为没有提供 i 和 e 的值。

所以只需读取输入,然后将其拆分并检查用户提供了多少参数:

input_str = input()
input_str_split = input_str.split(' ')
if len(input_str_split) == 3:
    command, i, e = input_str_split
    i = int(i)
    e = int(e)
else:
    command = input_str_split

【讨论】:

【参考方案4】:

出现此错误是因为您总是希望命令有 3 个输入:

command, i, e = input().split(' ')

当您使用仅打印时会发生这种情况:

>>> "print".split(' ')
['print']

所以input.split() 的输出是一个只有一个元素的列表。然而:

command, i, e = input().split(' ')

需要 3 个元素:commandie

其他答案已经向您展示了如何解决修改代码的问题,但是随着您添加更多命令,它会变得非常笨拙。您可以使用 Python 的原生 REPL 并创建自己的提示符。 (Original post where I read about the cmd module)

from cmd import Cmd

class MyPrompt(Cmd):
    my_list = []

    def do_insert(self, *args):
        """Inserts element in List"""
        self.my_list.append(*args)

    def do_print(self, *args):
        print(self.my_list)

    def do_quit(self, args):
        """Quits the program."""
        raise SystemExit


if __name__ == '__main__':
    prompt = MyPrompt()
    prompt.prompt = '> '
    prompt.cmdloop('Starting prompt...')

例子:

$ python main.py
Starting prompt...
> insert 2
> insert 3
> insert 4
> print
['2', '3', '4']
> 

cmd 还允许您记录代码,因为我没有为 print 创建文档字符串,这是我在终端中键入 help 后显示的内容:

> help

Documented commands (type help <topic>):
========================================
help  insert  quit

Undocumented commands:
======================
print

我把添加其他命令和一个有趣的练习留给你。 :)

【讨论】:

以上是关于Python操作mysql,怎么样判断输入的值在数据表中是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL查一个字段中 多个值

利用python实现二分法

没有足够的值在 Python 中解包

根据上一列中的值在 Python Dataframe 中构建行

where一个字段中不存在某个字符,怎么写mysql判断语句

python 字典的值为列表,想把一个列表的值拼在一起用‘\t’隔开,变成一个字符串怎么写?