对于我的函数,我想访问一个数据库,并从搜索命令函数中获取命令。
这是我的代码:
x="create vlan"
y="global"
def readswitch(x,y):
conn = sqlite3.connect('server.db')
with conn:
cur = conn.cursor()
run= cur.execute("SELECT command FROM switch WHERE function =? or type = ? ORDER BY key ASC",(x,y))
read = cur.fetchall()
return read;
import database
print (database.readswitch(x,y))
现在,我可以打印出我的答案,但结果上有一些错误如图所示:
C:\Python34\python.exe C:/Users/Username/PycharmProjects/2015122/database.py
[('enable',), ('configure terminal',), ('vlan (number)',), ('name (vlan name)',)]
[('enable',), ('configure terminal',), ('vlan (number)',), ('name (vlan name)',)]
Process finished with exit code 0
有三个错误,我不需要它,但我不知道如何修复
我打印出两次答案,但我不明白为什么打印两次。
我希望我的答案应按以下顺序打印:
enable conf t vlan (number) name (vlan name)
但它会连续打印。
[(' enable',),(' configure terminal',),(' vlan(number)',),'名称 (vlan name)',)]
到
enable
conf t
vlan (number)
name (vlan name)
有人能为我的功能提供一些建议吗? 我希望你能改进我的功能。谢谢。
答案 0 :(得分:0)
首先让我们解决结果打印两次的原因。
您有一个模块database.py
。它包含行
import database
print (database.readswitch(x,y))
然后使用
从命令行执行模块$ python database.py
在使用print
到达该行之前,您需要导入database
模块。这会导致模块的代码第二次执行。这意味着print
正在执行两次。
要解决此问题,请不要从模块中导入模块,只需使用
print (readswitch(x,y))
为了更加安全,您可以将其放在条件中。
if __name__ == '__main__':
print (readswitch(x,y))
现在我们可以解决您的输出格式。
fetchall
方法产生list
。当您打印整个列表时,它会将列表的内容打印为连续字符串。
>>> print([1, 2, 3, 'a', 'b', 'c'])
[1, 2, 3, 'a', 'b', 'c']
如果要格式化输出,则需要自己处理。最简单的方法是使用循环。
for command in readswitch(x, y):
print(command[0])
您也可以使用str.join
。
print('\n'.join(command[0] for command in readswitch(x, y))