Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中动态构建mysql查询_Python_Python 3.x - Fatal编程技术网

在Python中动态构建mysql查询

在Python中动态构建mysql查询,python,python-3.x,Python,Python 3.x,我们有一个用例,用户可以访问记录中的某些字段。 例如,以客户记录为例。用户可以查看客户的名字和姓氏,但不能查看他们的电话或电子邮件 样本记录: id, company, first_name, last_name, email, phone '3', 'ABC Company', 'Kevins', kevinboy@gmail.com, 667-545-9502 我们将动态构建一个查询,以便根据用户拥有的权限,他们只能在前端仪表板上编辑他们有权限的记录的字段 假设用户具有查看记录某些字段的

我们有一个用例,用户可以访问记录中的某些字段。 例如,以客户记录为例。用户可以查看客户的名字和姓氏,但不能查看他们的电话或电子邮件

样本记录:

id, company, first_name, last_name, email, phone
'3', 'ABC Company', 'Kevins', kevinboy@gmail.com, 667-545-9502 
我们将动态构建一个查询,以便根据用户拥有的权限,他们只能在前端仪表板上编辑他们有权限的记录的字段

假设用户具有查看记录某些字段的查看权限,那么他们也可以编辑这些字段。是的,字段具有每个用户的添加、查看、编辑和删除设置。用户只有在该字段上具有“添加”权限时才能添加新记录,只有在该字段上具有“编辑”权限时才能进行编辑,查看和删除也是如此

我们面临着动态构建查询以允许动态编辑的最佳方法的问题。例如,我们有一个工作概念:

permissions = engine.execute("SELECT column_name from user_profile where id = 1 and table_name = 'cust' and `edit` = 1")
formatted_query = "UPDATE cust SET %s WHERE id = %s" % (",".join([column_name[0] + ' = %s' for column_name in permissions]), request.json.get('id'))
values = tuple([request.json.get(column_name[0]) for column_name in permissions])
engine.execute(formatted_query, values)
这样,当一个请求被发送到我们的端点时,我们在customers表上检查用户有编辑权限的字段。然后,我们动态构建SQL查询,选择适当的列名和将从API调用传入的值

示例api负载类似于:POST/edituser
{“cust_id”:15,“first_name”:“johnson”,“last_name”:“doe”}
在permissions变量中,id 1是实际进行api调用的用户,因此我们检查他们的权限

有什么建议可以让它表现得更好吗

更新: 使用SQLALCHEMY动态创建:

engine.execute(table('cust').update().values({text(key): request.json.get(key) for key in [column_name[0] for column_name in permissions]}).where(column('id') == request.json.get('id')))

你能举一个例子说明这是如何被注入的吗?在一个不接受用户参数的select语句上,使用字符串格式设置查询的格式应该是好的,否则在这种情况下也不行?谢谢,我查一下@roganjosh@roganjosh但是,实际的SQL更新查询是否可以使用字符串格式动态创建,然后使用绑定正确连接字段?在我的示例中,我使用字符串格式来构建查询(无用户输入),然后获取用户输入。我找不到使用Parameterization动态构建具有适当更新字段的查询的方法实际上,请稍候。我在看我的手机。你实际上在做我建议的事。别理我!在这里,我可以建议的唯一一件事是,您可以在用户id上使用
ForeignKey
,这样就不需要在更改时更新其他表。这是数据库规范化的一部分(查看3NF)