Discuss / Python / aiomysqly的占位符是本来就是%s

aiomysqly的占位符是本来就是%s

Topic source

SpringShaw

#1 Created at ... [Delete] [Delete and Lock User]

为什么元类里构造默认的sql语句时用 '?' 占位

# 构造默认的SELECT, INSERT, UPDATE和DELETE语句:
        attrs['__select__'] = 'select `%s`, %s from `%s`' % (primaryKey, ', '.join(escaped_fields), tableName)

后面execute(sql语句) 的时候又换回来呢?

yield from cur.execute(sql.replace('?', '%s'), args or ())

是有'?'做占位符的场景还是老师自己习惯了

SpringShaw

#2 Created at ... [Delete] [Delete and Lock User]

编程好多细节啊 我有好多个<font color='red'>"为什么那么写呢"</font> 想问

好不容易把元类那章写ORM弄熟了,想自己来写这章的内容,结果只能写出大体结构,对照老师的代码反复推敲,为什么要那么写呢? 一定要自己写,多想想为什么. 自己回答吧: %s 既是mysql的占位符,又是python str的占位符,所以先将sql语句里的占位符用?表示,当字符串组建完成后再来replace('?','%s'),这样就不冲突了

一起讨论啊,'?'是Mysql里的占位符,不同sql中的占位符不一样,在数据库那一章讲过。好像和数据库的安全性相关。SQL是一种语言,我们就好像把这种语言翻译成python语言的一步。


  • 1

Reply