mysql_init的参数怎么定,关于python:__ init __()恰好接受1个参数,MYSQL

我知道有人问过相同标题的问题,但根据给出的解决方案我无法解决问题。 我正在使用argparser连接到数据库并获取数据。 这里

import os

import logging

import argparse

import mysql.connector

def main():

parser = create_parser()

args = parser.parse_args()

query_result = get_name_and_id(args.user, args.password, args.host, args.database)

def create_parser():

parser = argparse.ArgumentParser(description="Require database credentials")

parser.add_argument("--host", required="True", metavar="[host]", dest='host', help="Database host")

parser.add_argument("--database-name", required="True", metavar="[database]", dest='database', help="Name of the database to connect to.")

parser.add_argument("--user-name", metavar="[user]", dest='user', required="True")

parser.add_argument("--password", required="True", metavar="[password]", dest='password')

return parser

def get_name_and_id(user,password,host,database):

con = mysql.connector.connect(user, password, host, database)

cursor = con.cursor()

query = ("SELECT id, name FROM some_table")

cursor.execute(query)

name_id_list = dict()

for id, name in cursor:

name_id_list[id] = name

return name_id_list

if __name__ =="__main__":

main()

要运行此程序,我使用命令

python test_database.py --host somehost --database somedb --user-name myuser-name --password my password

和这是stacktrace:

File"test_arg_parsing.py", line 59, in

main() File"test_arg_parsing.py", line 14, in main

query_result = get_name_and_id(args.user, args.password, args.host, args.database) File"test_arg_parsing.py", line 32, in

get_enqueuer_data

con = mysql.connector.connect(user, password, host, database) File"/Library/Python/2.7/site-packages/mysql/connector/init.py",

line 179, in connect

return MySQLConnection(*args, **kwargs) File"/Library/Python/2.7/site-packages/mysql/connector/connection.py",

line 57, in init

super(MySQLConnection, self).init(*args, **kwargs) TypeError: init() takes exactly 1 argument (5 given)

我在这里不明白的是,它是否在抱怨MySQLConnection的初始化函数? 还是我执行的命令不正确? 我已经使用mysql连接器成功连接到了相同的数据库。 但是我现在想将凭据作为参数传递。 这是怎么了?

这些必须是关键字参数。 尝试:

con = mysql.connector.connect(user=user, password=password, host=host, database=database)

是的 这就是我所缺少的。 谢谢。

首先,get_name_and_id函数应接受连接参数:

def get_name_and_id(user, password, host, database):

然后,根据connect()函数定义,您需要指定关键字参数:

def get_name_and_id(user, password, host, database):

con = mysql.connector.connect(user=user, password=password, host=host, database=database)

或者,您可以传递任意关键字参数:

def get_name_and_id(**kwargs):

con = mysql.connector.connect(**kwargs)

# ...

用法:

def main():

parser = create_parser()

args = parser.parse_args()

query_result = get_name_and_id(user=args.user,

password=args.password,

host=args.host,

database=args.database)

我不好,我在发布问题时错过了函数的参数。 病态更新。

我不敢相信我是这样的粗心。 谢谢亚历克斯

@ user3527975我实际上发现此mysql连接器连接函数的行为令人困惑-为什么它们使它仅与关键字参数一起使用...谢谢。

在第二个选项中,您正在使用args.user,args.password。 Args对于main方法而言是局部的。

@ user3527975是的,已更新以使其更加清晰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值