python往postgresql里面写带逗号的字符串报错

螺纹钢铁侠 2017-03-06 10:25:31
import urllib.request
import re
import psycopg2 as psy
conn=psy.connect(database='test1',user='postgres',password='091297',host='127.0.0.1',port='5432')
cur=conn.cursor()
try:
cur.execute('create table 糗事百科(num int,str text);')
except:
pass
conn.commit()
def get_html(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0')
response=urllib.request.urlopen(req)
html=response.read().decode('utf-8')
return html

def get_list(html):
list1=re.findall(r'\<div class="content"\>\n{4}.+?\n{3}\</div\>',html)
for each in list1:
str1=re.search(r'\<span\>.+\</span\>',each).group()[6:-7]
str1=str1.replace('<br/>','\n')
print(str1)
global i
i=i+1
print(i)
cur.execute('''insert into 糗事百科 values(%d,%s);'''%(i,str1)) ##就是这个str1里面一有逗号就被当成了分隔符,一个字段变成了俩字段,然后就报错了
conn.commit()

i=0
for page in range(1,35):
print(page)
html=get_html('http://www.qiushibaike.com/text/page/'+str(page)+'/')
get_list(html)



报错信息如下

C:\Users\Administrator\AppData\Local\Programs\Python\Python35\python.exe C:/Users/Administrator/Desktop/python练习文件/糗事百科.py
1
开学了,爸妈特意请了一天假去火车站送我。相别泪两行,一副离了我就活不下去的样子,我也悲从中来,拉着行李箱不知说什么好,半天挤出来一句“爸妈,一会回家小心点”我爸说“不,一会儿我跟你妈去泡温泉”
1
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/python练习文件/糗事百科.py", line 34, in <module>
get_list(html)
File "C:/Users/Administrator/Desktop/python练习文件/糗事百科.py", line 27, in get_list
cur.execute('insert into 糗事百科 values(%d,%s);'%(i,str1))
psycopg2.ProgrammingError: 错误: 字段 "开学了,爸妈特意请了一天假去火车站送我。相" 不存在
LINE 1: insert into 糗事百科 values(1,开学了,爸妈特意请了一天假去火...

^


Process finished with exit code 1

特地试了一下
>>> cur.execute('insert into 糗事百科 values(%d,%s);'%(1,'1234'))
>>> cur.execute('insert into 糗事百科 values(%d,%s);'%(1,'12,34')) ##多了一个逗号
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
cur.execute('insert into 糗事百科 values(%d,%s);'%(1,'12,34'))
psycopg2.ProgrammingError: 错误: INSERT 的表达式多于指定的字段数
LINE 1: insert into 糗事百科 values(1,12,34);


一个长字符,text里面有逗号在所难免,怎么才能不被当成字段分隔符?
...全文
1521 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
#0xZ 2018-01-06
  • 打赏
  • 举报
回复
你这是python的问题吧,带逗号的肯定是字符串了,你把逗号转义下应该就没问题了
永远都学不完 2017-12-27
  • 打赏
  • 举报
回复
str1要用$$包围起来。 $$这里是str1的内容$$

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧