我试图从Python添加一个新的Wordpress用户。我创建了这个函数:
def adduser(domain_ip,username,password):
db = MySQLdb.connect(host=domain_ip, user=username, passwd=password)
cur = db.cursor()
cur.execute("USE %s;" % "yogatrai")
cmd1 = """INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`, `user_nicename`, `user_email`, `user_status`) VALUES ('5', 'demo1', MD5('demo1demo'), 'firstname lastname', 'email@example.com', '0');"""
cur.execute(cmd1)
同一个sql命令在Navicat中工作。在Python中,它返回ok,但新用户不在数据库中。我的错误在哪里?在
看起来你还没有提交交易。MySQLdb提供了一种通过
with
管理事务上下文的便捷方法,如下所示:其中
connection
是开放数据库连接对象,query
是参数化的SQL语句,parameters
是用户提供的任何值。参数化SQL语句非常重要,因为它可以帮助您避免语法错误,并防止恶意SQL注入。参数化的另一个好处是,您可以在函数之外定义参数化SQL,使函数本身更易于阅读。在下面是如何在
^{pr2}$adduser
函数中实现这种方法。首先,将SQL语句重写为参数化查询:我把语句放在自己的行上,这样我就可以很快地在Python源代码和MySQL Workbench或命令行之间复制和粘贴SQL。您可以使用您喜欢的任何样式;需要注意的是,每个用户输入值都有一个
%s
占位符。execute
函数将负责转义特殊字符、引用字符串等,因此您不必这样做。在现在,功能可以简单得多:
MySQLdb.connect
的db
参数将替换您的USE
语句,with
上下文管理器负责处理事务。如果在with
块内引发异常,则事务将回滚;否则,with
块结束时将提交该异常。我将更详细地讨论这种用MySQLdb进行事务管理的方法in another answer。在当然,以上代码的最终测试目的应该是不同的。我唯一的另一个建议是,尝试使用比
cmd1
更有意义的名称。我喜欢把SQL语句当作常量来处理,所以我可能会将它命名为INSERT_USER
;重要的是要清晰一致。在您需要在插入操作之后提交并关闭数据库连接。 假设
sql
是您的查询字符串,请执行以下操作:请查看以下示例: http://www.tutorialspoint.com/python/python_database_access.htm
相关问题 更多 >
编程相关推荐