python mysql连接器查询返回none

时间:2015-03-03 19:57:39

标签: python mysql-python

我遇到了mysql连接器的问题。我确实搜索了一段时间,但一无所获。

如果我执行只有查询的第一个文件,它会按预期工作。但是如果我尝试创建一个db类并将查询放在那里,它将返回None。我取出了位置变量,它是一样的。无论我尝试查询什么,它都会返回None。我甚至试图做一个“SHOW TABLES”,它返回None。

另外,我在调试器中运行它并查看游标对象以确定,以及mysql常规日志。查询是正确的,一切看起来都应该给我。

这是我第一次尝试使用python,我希望解决方案是一个简单的新手错误。

有效的查询: 的 test.py

import mysql.connector

_config = {
    'user': 'user',
    'password': 'password',
    'host': '127.0.0.1',
    'database': 'testdb',
    'raise_on_warnings': True,
    }
cnx = mysql.connector.connect(**_config)

cursor = cnx.cursor()
query = ("SELECT * FROM testtbl WHERE location=%s")
location='HERE'
cursor.execute(query, (location, ))

print("--- " + str(cursor) + " ----")
for (stuff) in cursor:
  print("stuff: '" + stuff[0] + "', more stuff: '" + stuff[1] + "'")

cursor.close()
cnx.close()

那些不起作用的: somedb.py

import mysql.connector

class SomeDB(object):
    def __init__(self):
        _config = {
            'user': 'user',
            'password': 'password',
            'host': '127.0.0.1',
            'database': 'testdb',
            'raise_on_warnings': True,
        }
        self.conn = mysql.connector.connect(**_config)
        self.cur = self.conn.cursor()

    def get_stuff(self):
        query = ("SELECT * FROM testtbl WHERE location=%s")
        location="HERE"
        result = self.cur.execute(query, (location, ))
        return result

    def __del__(self):
        self.conn.close()

根据Alu的建议,我将get_stuff方法更改为:

def get_nodes(self):
    query = ("SELECT * FROM testtbl WHERE location=%s")
    location="HERE"
    cursor = self.cur.execute(query, (location, ))
    list = []
    for (thing) in cursor:
        list.append(([thing[0],thing[1]]))
    return list

test2.py

import somedb

db = somedb.SomeDB()

cursor = db.get_stuff()
print("--- " + str(cursor) + " ----")
for (stuff) in cursor:
  print("stuff: '" + stuff[0] + "', more stuff: '" + stuff[1] + "'")

更新

好的,我无法让它发挥作用。我已经使用调试器和类抽象一起完成了这个代码,其他所有看起来都是相同的。所以让我改进一下我的问题:这可能与任何mysql驱动程序有关吗?这就是我想要做的事:https://softwareengineering.stackexchange.com/questions/200522/how-to-deal-with-database-connections-in-a-python-library-module

UPDATE2

我找到了它!

    result = self.cur.execute(query, (location, ))
    return result

需要,简单地说:

    self.cur.execute(query, (location, ))
    return self.cur

1 个答案:

答案 0 :(得分:1)

据我记得,你必须在每次交易后提交连接。

您可以尝试将此作为示例。这是我的数据库类。 https://github.com/CatCookie/DomainSearch/blob/master/src/additional/database.py