Chinaunix

标题: python访问mysql产生的段错误问题 [打印本页]

作者: jxncyjq    时间: 2009-03-15 19:58
标题: python访问mysql产生的段错误问题
运行环境
os:linux redhat 5.0
py:python 2.5.2
mysqlmod:MySQL-python-1.2.2.tar.gz

访问mysql的时 在执行cur.execute(sql)以后会返回段错误.错误提示为
Segmentation fault

这个有没有办法?

程序在windows环境下执行无问题...
作者: carrison    时间: 2009-03-15 21:02
太笼统了,兄弟你贴一下源码呀。
作者: jxncyjq    时间: 2009-03-16 11:22

  1. import os
  2. import time
  3. import MySQLdb as sql
  4. os.system('''netstat -atl |awk {'print $5'}|grep '^[0-9]'|cut -f 1,12 -d : |sort -d |uniq -d -c |sort -d >/root/list.txt''')
  5. #-----------------------var def--------------------
  6. FILEPATH='/root/list.txt'
  7. sqlstr='''insert into mytable (ltime,IP,lnum,sname) values (%s,%s,%s,%s)'''

  8. SIP='192.168.1.1'
  9. SNAME='abc'
  10. SPWD='def'
  11. SDB='run'

  12. SVRNAME='server1'
  13. linestr=''
  14. datetime=time.strftime('%Y-%m-%d %H:%M:%S')
  15. conn=sql.Connection(SIP,SNAME,SPWD,SDB)
  16. cur=conn.cursor()
  17. num=0
  18. ip=''
  19. onum=0
  20. oip=''
  21. index=0
  22. ips=range(0,4)
  23. #-------------------------------------------------
  24. f=file(FILEPATH,'r')
  25. while True:
  26.     linestr = f.readline().lstrip()
  27.     if not len(linestr):
  28.         break
  29.     index=linestr.find(' ')
  30.     onum=num
  31.     num=int(linestr[0:index].strip())
  32.     if num>=5:
  33.         oip=ip;
  34.         ip=linestr[index+1:].strip()
  35.         echar=ip[len(ip)-1:]
  36.         if not (echar>='0' and echar <='9'):
  37.             for i in range(0,4):
  38.                 index=ip.find('.')
  39.                 if index=='-1' :
  40.                     index=1
  41.                 else:
  42.                     index=ip.find('.')
  43.                     ips[i]=ip[0:index]
  44.                     ips[i]=ip[0:index]
  45.                     ip=ip[index+1:]
  46.             ip='%s.%s.%s.%s' %(ips[3],ips[2],ips[1],ips[0])
  47.             if oip==ip:
  48.                 num=onum+num
  49.                 #print 'datetime %s,num is %s,ip is %s,SVRNAME is %s' % (datetime,num,ip,SVRNAME)
  50.         else:
  51.             #print 'datetime is %s,num is %s,ip is %s,SVRNAME is %s' % (datetime,num,ip,SVRNAME)
  52.             param=(datetime,ip,num,SVRNAME)
  53.             cur.execute(sqlstr,param)
  54. del cur
复制代码

这是我的代码,在执行了cur.execute之后,程序就报段错误,然后中止运行.
作者: jxncyjq    时间: 2009-03-16 14:30
自己顶一下
作者: bohemia    时间: 2009-03-16 15:07
直接通过客户端访问下MySQL看下是否也出现错误;
我估计不是因为Py的原因.而是MySQL本身的问题.
作者: jxncyjq    时间: 2009-03-16 16:47
直接访问mysql没有问题.可以正常连接
作者: guijia8427    时间: 2009-03-16 17:56
del cur 是哈
cur.close()
conn.close()不行么
作者: jxncyjq    时间: 2009-03-16 18:15
del cur 是新cur对象删除
问题不是在这,我使用了
#! /usr/bin/python
import MySQLdb as sql
conn = sql.Connection('localhost','root')
cur = conn.cursor()
cur.execute('show databases')
list = cur.fetchall()
print list
cur.close()
conn.close()
写这段代码也同样出了这个问题.
作者: lvDbing    时间: 2009-03-17 02:19
try/except 看下异常?
作者: 雨夜流星    时间: 2009-03-17 10:04
标题: 回复 #8 jxncyjq 的帖子
三楼的代码没仔细看,
但8楼的代码应该是:
    cur.execute('show databases')
MySQL语句是以';'结束的,所以这句有问题。
作者: 3227049    时间: 2009-03-17 10:49
是不是libmysql有问题。。Segmentation fault一般是内存越界之类引起的。。从py代码上找解决办法好像有点不靠谱。。。。

升级下mysql然后重新编译下python-mysql看看。。。
作者: mhz-ada    时间: 2009-03-17 21:47
原帖由 jxncyjq 于 2009-3-16 18:15 发表
del cur 是新cur对象删除
问题不是在这,我使用了
#! /usr/bin/python
import MySQLdb as sql
conn = sql.Connection('localhost','root')
cur = conn.cursor()
cur.execute('show databases')
list = cu ...


在我这个机器上试验了,没问题,楼主看下是不是其他原因
  1. [root@localhost]# cat 1.py
  2. #! /usr/bin/python
  3. import MySQLdb as sql
  4. conn = sql.Connection('localhost')
  5. cur = conn.cursor()
  6. cur.execute('show databases')
  7. list = cur.fetchall()
  8. print list
  9. cur.close()
  10. conn.close()
  11. [root@localhost]# python 1.py
  12. (('information_schema',), ('mysql',), ('test',), ('new',), ('MetaData',))
复制代码

作者: jxncyjq    时间: 2009-03-18 13:57
我的mysql是用二进制包安装的,会不会因为这个影响?
我试过用rpm安装包安装的mysql就不会有这个问题..
为什么?
作者: 3227049    时间: 2009-03-18 16:19
原帖由 jxncyjq 于 2009-3-18 13:57 发表
我的mysql是用二进制包安装的,会不会因为这个影响?
我试过用rpm安装包安装的mysql就不会有这个问题..
为什么?

build python-mysql的时候有没有改site.cfg里的mysql_config路径?很可能是因为python-mysql用的libmysql链接是rpm装的mysql,而你用的是bin包里的mysql。。所以。。。
作者: jxncyjq    时间: 2009-03-19 16:29
路径是改过了的...

而且我的服务器上没有安装rpm版本的mysql

[ 本帖最后由 jxncyjq 于 2009-3-26 11:26 编辑 ]
作者: fengmk2    时间: 2009-03-24 15:25
尝试select field1, field2,少一些字段, 不用select *看看,不过即使成功了,返回的结果集里面的字段却是str,而不是unicode....
作者: jxncyjq    时间: 2009-04-09 15:58
问题没有得到解决...继续求助...
代码
#! /usr/bin/python
import MySQLdb as sql
conn = sql.Connection('localhost')
cur = conn.cursor()
cur.execute('show databases')
list = cur.fetchall()
print list
cur.close()
conn.close()


执行结果



(('information_schema',),('mysql',))

Segmentation fault

[ 本帖最后由 jxncyjq 于 2009-4-9 16:00 编辑 ]
作者: jxncyjq    时间: 2009-04-10 12:40
顶,请求仙人帮助找找问题...跪求答案
作者: fmail    时间: 2009-04-13 23:20
重新手动装下MySQLdb




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2