Python 3.x 将None或字符串值从变量传递到字符串格式python
我正在尝试构造用于向postgreSQL插入数据的查询。我使用字符串格式将变量传递给查询。问题是变量中的值可能是None(从函数返回)。 我的问题看起来像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
"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炼金术知识非常有用:)祝你好运!