python—通过游标从mysql中选择记录将返回一个none对象

3pvhb19x  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(324)

我正在使用mysqlconnector用python3.x编写一个脚本。我现在要做的是检查我的数据库中是否有一条记录,它可能与我现在正在分析的记录重复。我想出了这样的代码:

def fill_data(self, db_name, data):
    cursor = self.cnx.cursor(buffered=True)
    isDuplicate = cursor.execute(("SELECT destination FROM {0} WHERE destination = '{1}';")
                                 .format(db_name, data['destination']))

    print(cursor.statement)
    self.commit()
    print(isDuplicate is None)

尽管我还是被复制为无对象。我试图通过cursor.statement检查传递给db的语句是什么:结果是,在脚本中,当传递给db时,我没有得到obj,查询工作正常。我还尝试从db\u name中选择count(1),这也给了我不同的结果。
我没主意了:也许你们能帮我?
更新:
对我有效的解决方案是:

q = ("SELECT * FROM {0} WHERE destination = %s AND countryCode = %s AND prefix = %s")
.format(db_name)
    cursor.execute(q, (data['destination'], data['country_code'], data['prefix']))
    self.cnx.commit()
    isDoubled = cursor.fetchone()

因此,归根结底,这一切都是为了从游标中获取数据:)

p1tboqfb

p1tboqfb1#

也许你的问题是因为你的使用方式 execute() 方法。
尝试进行一些更改并查看打印出的内容:

def fill_data(self, db_name, data):
    cursor = self.cnx.cursor(buffered=True)
    q = 'SELECT count(*) FROM {} WHERE destination = %s'.format(db_name)
    duplicate_count = cursor.execute(q, (data['destination'], )).fetchall()
    print(duplicate_count)

为什么要这样提供查询参数(文章正在发表 psql ,但核心原则与 mysql )

更新

如果你还收到 "NoneType" object has no atribute "fetchall" ,则错误可能是:

cursor = self.cnx.cursor(buffered=True)

看起来你不是在创造 cursor 完全。我可以看看,如果你张贴一些代码 cnx 创造。

相关问题