用Python获取MySQL数据库列表

8
我将尝试通过 Python(2.7)获取与我的 MySQL 服务器关联的所有数据库名称,但实际上我只能获取到数据库数量。
我查看了一些资料,似乎唯一的解决方法是使用“sys”进行命令行调用并获取数据库名称,然后从那里继续,但我不相信这是唯一的方法。 当前代码:
import MySQLdb

serv = MySQLdb.connect(host = "localhost", user = "root", passwd = "abcdefg")

c = serv.cursor()

print c.execute("SHOW DATABASES")

输出:

4

感谢您提前提供的帮助。
谢谢。

3
在执行execute之后,尝试使用print c.fetchall()输出结果。 - khelwood
1
@khelwood:非常好,谢谢!显然我是个新手。我还添加了l = c.fetchall(); l = [ i[0] for i in l ],因为它返回的是一个元组的元组,其中内部元组的第二个项目为空 - 你知道这是为什么吗? - elPastor
相关:在您的上下文中,execute返回结果中的行数。 - agtoever
1
每个元组都是查询结果中的一行。我不确定为什么这个元组会有一个空值(或者 None)。 - khelwood
@khelwood - 好的,非常感谢。 - elPastor
2个回答

11

我不确定mysql连接器是否与你的库相同,但是使用mysql连接器,你的答案可能类似于:

import mysql.connector
conn = mysql.connector.connect (user='user', password='password',
                               host='server_address',buffered=True)
cursor = conn.cursor()
databases = ("show databases")
cursor.execute(databases)
for (databases) in cursor:
     print databases[0]

2
对于 Python 3,请使用 print(databases[0])。 - Nino van Hooff
你好,查看数据库是否有除了 for 循环以外的替代方法?我已经检查了光标对象,但没有发现任何数据库的痕迹。非常感谢您提供帮助。 - peter

1

我是一名有用的助手,可以翻译文本。

以下是需要翻译的内容:

仅仅是将之前的评论重新组织一下: 当前代码:

import MySQLdb
serv = MySQLdb.connect(host = "localhost", user = "root", passwd = "abcdefg")
c = serv.cursor()
print c.execute("SHOW DATABASES")

带建议修改的内容:
import MySQLdb
serv = MySQLdb.connect(host = "localhost", user = "root", passwd = "abcdefg")
c = serv.cursor()
c.execute("SHOW DATABASES")
l = c.fetchall()
print l
l = [ i[0] for i in l ]
print l

在我的情况下,输出看起来像这样(这是期望的输出):
(('information_schema',), ('data',), ('mysql',), ('performance_schema',), ('sys',))
['information_schema', 'data', 'mysql', 'performance_schema', 'sys']

请注意以下常见错误以避免错误:如果您尝试执行 c.execute("SHOW DATABASES").fetchall(),则会出现错误:AttributeError: 'int' object has no attribute 'fetchall'。因此,您应首先编写 c.execute("SHOW DATABASES"),其次编写c.fetchall()

如果你收到一个错误提示,那么这意味着你的代码没有回答问题并提供解决方案? - ADyson
真的,它起作用,最后一段是为了指出一个常见的错误(至少对我来说是这样)。 - Rafael Valero
好的。我认为您可以澄清措辞或格式,使其更易于理解。 - ADyson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接