Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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 3.x 将None或字符串值从变量传递到字符串格式python_Python 3.x_Postgresql_String Formatting_Nonetype - Fatal编程技术网

Python 3.x 将None或字符串值从变量传递到字符串格式python

Python 3.x 将None或字符串值从变量传递到字符串格式python,python-3.x,postgresql,string-formatting,nonetype,Python 3.x,Postgresql,String Formatting,Nonetype,我正在尝试构造用于向postgreSQL插入数据的查询。我使用字符串格式将变量传递给查询。问题是变量中的值可能是None(从函数返回)。 我的问题看起来像 "INSERT INTO Order (uuid) VALUES ('{}'); " "INSERT INTO MyTable (uuid, name, uuidOtherTable) " "VALUES ('{}', '{}', {} );".format(obj.uuid, obj.uuid, obj.name, obj.uuidOthe

我正在尝试构造用于向postgreSQL插入数据的查询。我使用字符串格式将变量传递给查询。问题是变量中的值可能是None(从函数返回)。 我的问题看起来像

"INSERT INTO Order (uuid) VALUES ('{}'); "
"INSERT INTO MyTable (uuid, name, uuidOtherTable) "
"VALUES ('{}', '{}', {} );".format(obj.uuid, obj.uuid, obj.name, obj.uuidOtherTable)
外键
uuidOtherTable
可能是
NULL
值,因此如果它存在或不存在,则会有变体。 这种情况不仅适用于外键,也适用于其他字段。 我想实现灵活的版本。 我正在加入几个插入,因此
.format()
方法更可取

当obj.uuidOtherTable为None时,{}可以正常工作,但如果是string->我必须使用{}而不是{}


看起来很明显,但没有成功。有什么想法吗?

由于以下原因,请不要使用字符串插值来构建SQL查询

您应该使用参数化查询:

db_cursor_object.execute('''INSERT INTO MyTable (uuid, name, uuidOtherTable)
                            VALUES (%s, %s, %s)''', (obj.uuid, obj.name, obj.uuidOtherTable))


即使参数不是来自用户输入,这也更容易,因为它会自动处理类型(例如对字符串使用
'
null
(或您的DB风格使用的任何东西)对
,等等).

我建议您使用SQLAlchemy来处理数据库ORM,这会使您的工作更轻松,而且您不需要太在意sql注入,也不需要将数据正确格式化为sql语句

是的,我用这种方法。。。现在我必须加入多个插入,以便一次执行它们,而不是每行执行一次。你能给我一个连接参数化查询的方法吗?我已经在DataGRIP中测试了填充值的连接查询,它可以工作。我想在一个事务中执行一个大查询。我已经编辑了我的问题,以便您理解我的方法谢谢您的建议!我有一点炼金术的经验。我希望有一个没有SQLAlchemy的解决方案所有的经验都是提高你技能的好机会:)在实际工作中sql炼金术知识非常有用:)祝你好运!