pythonmysqldberror
这个问题并不是转义方面的问题,不信的话可以使用\s的完整模式status试试:
sql = 'status'
还是一样会报错,这是因为\s属兆睁差于mysql的系统命令,并不输入sql语句的范畴,所有使用python的mysqldb模块是获得不到族皮结果的。
这样的话只能从python的os模块早吵执行系统命令方面入手了
>>> import os
>>> os.system("mysql -u root -e status")
--------------
mysql Ver 14.15 Distrib 6.0.11-alpha, for portbld-freebsd7.2 (i386) using 5.2
Connection id: 66
Current database:
Current user: root@localhost
...
...
或者
>>> print os.popen("mysql -u root -e status").read()
--------------
mysql Ver 14.15 Distrib 6.0.11-alpha, for portbld-freebsd7.2 (i386) using 5.2
Connection id: 67
...
...
希望能帮到楼主
‘贰’ linux系统源码安装Mysqldb,报错error: command 'gcc' failed with exit status 1,这个是什么原因呢
我看不懂你是怎么运行的命令,我仅仅好意提示一下:
UNIX(不限于linux)下用源码安装软件,一般使用make命令。python 行与不行真不知道。
你的错误原因启动gcc编译器器启动不了。你安装一个gcc,可能解决了。
‘叁’ 怎么把python查询到mysql数据库里的数据列表显示到网页上
我采用的是MySQLdb操作的MYSQL数据库。先来一个简单的例子吧:
import MySQLdb
try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)
cur=conn.cursor()
cur.execute('select * from user')
cur.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
请注意修改你的数据库,主机名,用户名,密码。
下面来大致演示一下插入数据,批量插入数据,更新数据的例子吧:
import MySQLdb
try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
cur=conn.cursor()
cur.execute('create database if not exists python')
conn.select_db('python')
cur.execute('create table test(id int,info varchar(20))')
value=[1,'hi rollen']
cur.execute('insert into test values(%s,%s)',value)
values=[]
for i in range(20):
values.append((i,'hi rollen'+str(i)))
cur.executemany('insert into test values(%s,%s)',values)
cur.execute('update test set info="I am rollen" where id=3')
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
请注意一定要有conn.commit()这句来提交事务,要不然不能真正的插入数据。
运行之后我的MySQL数据库的结果就不上图了。
import MySQLdb
try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
cur=conn.cursor()
conn.select_db('python')
count=cur.execute('select * from test')
print 'there has %s rows record' % count
result=cur.fetchone()
print result
print 'ID: %s info %s' % result
results=cur.fetchmany(5)
for r in results:
print r
print '=='*10
cur.scroll(0,mode='absolute')
results=cur.fetchall()
for r in results:
print r[1]
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
运行结果就不贴了,太长了。
查询后中文会正确显示,但在数据库中却是乱码的旦游。经过我从网上查找,发现用一个属性有可搞定:
在Python代码
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python') 中加一个属性:
改为:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8')
charset是要跟你数据库的编码一样兆陆,族迟顷如果是数据库是gb2312 ,则写charset='gb2312'。
下面贴一下常用的函数:
然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚
cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.
‘肆’ python连接mysql数据库出错,已经尝试了网上的几种解决方法
这里的意思是:数据库连不上啊。
可能是网络问题,可能是防火墙问题,可能是3306端口没开。你先排除这些问题吧。用一些mysql工具连接测试看,比如SQLyog 测试。
‘伍’ MySQL-python连接MySQL数据库问题,总是抛异常。
不要刚开始学多线程编程就这样玩。connection 和 cursor 都不是线程安全的。
如果测试环境用多个线程,每个线程要在线程里面获取自己的 connection,然后从这个connection 获取 cursor.
如果生产环境用多个线程,建议使用线程安全的连接池。
‘陆’ python 连接mysql 时,connect 出现错误,怎么解决
#-*-coding:utf-8-*-
importMySQLdb
fromMySQLdb.cursorsimportDictCursor
defcatch_2006(func):
"""
TocatchMySQLError2006('Serverhasgoneaway')
"""
def_(self,*args,**kwargs):
迹悉渗try:
returnfunc(self,*args,**kwargs)
姿脊exceptMySQLdb.Error,e:
print__file__,e
ife.args[0]==2006ore.args[0]==0:
self.reboot_conn()
returnfunc(self,*args,**kwargs)
#todo
#Howtodealifnotthecode
return_
classDB(object):
def__init__(self,host,port,user,
passwd,db,use_unicode=True,charset='utf8'):
self.host=host
self.port=port
self.user=user
self.passwd=passwd
self.db=db
self.use_unicode=use_unicode
self.charset=charset
@property
defconn(self):
ifnothasattr(self,'__conn'):
self.__conn=MySQLdb.connect(
host=self.host,
port=self.port,
user=self.user,
passwd=self.passwd,
db=self.db,
use_unicode=self.use_unicode,
charset=self.charset
)
returnself.__conn
defreboot_conn(self):
ifhasattr(self,'__conn'):
try:
self.__conn.close()
delself.__conn
except:
pass
@catch_2006
defquery(self,sql,args=None):
printsql
cursor=self.conn.cursor()
cursor.execute(sql,args)
陆渗cursor.execute('commit')
cursor.close()
@catch_2006
defselect(self,sql,args=None,is_dict=False,is_one=False):
#printsql,args
ifis_dict:
cursor=self.conn.cursor(cursorclass=DictCursor)
else:
cursor=self.conn.cursor()
cursor.execute(sql,args)
ifis_one:
resultset=cursor.fetchone()[0]
else:
resultset=cursor.fetchall()
cursor.close()
returnresultset
这个是我以前项目中使用python链接mysql的例子,你可以参考一下。
如果解决了您的问题请采纳!
如果未解决请继续追问!
‘柒’ python操作数据库mysql数据库出现错误奇怪望高人指点
给你我写的python mysql扩展吧
#-*-coding:utf-8-*-
#mysqlbyfinalv1.03e
from纤蔽warningsimportfilterwarnings
importMySQLdb
filterwarnings('ignore',category=MySQLdb.Warning)
#
#resetwarnings()
classmysql:
def__init__(self,host,user,passwd,db,timeout=5,language="utf8"):
self.host=host
self.user=user
self.passwd=passwd
self.db=db
self.sql=""
self.timeout=timeout
try:
self.conn=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.db)#,connect_timeout=self.timeout)
except:
print"MySQLdbconnecterror"
return
else:
pass
self.language(language)
self.cursor=self.conn.cursor(MySQLdb.cursors.DictCursor)
#self.cursor=self.conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
self.cursor.execute("setnames'%s'毁清州"%language)
self.conn.text_factory=str
self.fieldsarr=[]
self.pagesize=20
self.page=0
self.usepage=0
deflanguage(self,language):
self.conn.set_character_set(language)
deffields(self):
returnself.fieldsarr
defsetpagesize(self,pagesize=0):
self.pagesize=pagesize
defgetpageinfo(self):
ifre=re.search("select([0-9a-zA-Z|,|正掘|']*)from([0-9a-zA-Z|,|'|_|]*)",self.pagesql)
maxcount=self.fetch("selectcount(*)from%s"%ifre.group(2))[0]
return[maxcount,int(maxcount/self.pagesize)]
defquery(self,sql):
#print"!3"
ifself.usepage==1:
sql="%slimit%s,%s"%(sql,(self.page-1)*self.pagesize,self.pagesize)
self.usepage=0
self.sql=sql
#printsql
self.cursor.execute(sql)
defexecute(self,sql):
self.sql=sql
self.cursor.execute(sql)
self.conn.commit()
deffetchall(self,sql="",page=-1):
ifpage>=0:
self.page=page+1
self.usepage=1
self.pagesql=sql
ifsql:
self.query(sql)
#self.fieldsarr=["%s"%x[0]forxinself.cursor.description]
self.fieldsarr=self.cursor.description
returnself.cursor.fetchall()
deffetch(self,sql=""):
#print"222"
ifsql:
self.query(sql)
#self.fieldsarr=["%s"%x[0]forxinself.cursor.description]
#print0
self.fieldsarr=self.cursor.description
#print1
mfetchall=self.cursor.fetchall()
#print3
ifmfetchall:
returnmfetchall[0]
else:
return[]
defconvstr(self,s,fun=None):
iftype(s)in(type(u""),type("")):
iffun:
#print"kfun"
returnfun(s,139)
else:
#print"nostr"
returnstr(s).replace("'","''")
else:
#print"num"
returns
deftosql(self,sql):
returnself.conn.escape_string(sql)
defaddnew(self,tablename,data={},fun=None,commit=True):
iffun:
sql="insertinto%s(%s)values(%s)"%(tablename,",".join(["`%s`"%yforyindata]),",".join(["'%s'"%self.convstr(data[y],fun)foryindata]))
else:
sql="insertinto%s(%s)values(%s)"%(tablename,",".join(["`%s`"%yforyindata]),",".join(["'%s'"%str(data[y]).replace("'","''")foryindata]))
sql=sql.replace("'fdm:datetime'","now()")
sql=sql.replace("'fdm:time'","UNIX_TIMESTAMP()")
#printsql
self.cursor.execute(sql)
self.insertid=int(self.conn.insert_id())
ifcommit==True:
self.conn.commit()
defdelete(self,tablename,ids=[]):
sql="deletefrom%swhereidin(%s)"%(tablename,",".join(["%s"%yforyinids]))
self.cursor.execute(sql)
self.conn.commit()
defupdate(self,tablename,data={},where=""):
sql="update%sset%s"%(tablename,",".join(["`%s`='%s'"%(x,str(data[x]).replace("'","''"))forxindata]))
ifwhere:
sql="%swhere%s"%(sql,where)
sql=sql.replace("'fdm:datetime'","now()")
sql=sql.replace("'fdm:time'","UNIX_TIMESTAMP()")
#printsql
self.cursor.execute(sql)
self.conn.commit()
def__del__(self):
print"closemysql";
self.cursor.close()
self.conn.close()
definsert_id(self):
self.conn.insert_id()
defclose(self):
self.__del__()
‘捌’ python 连接mysql数据库报错
编辑mysql配置文件my.ini(在MySQLServer的安装目录),在[mysqld]这个条目下加入 skip-grant-tables
保存退出后重启mysql
1.点击“开始”->“运行”(快捷键Win+R)。
2.启动:输入 net stop mysql
3.停止:输入 net start mysql
这时候在cmd里面输入mysql -u root -p就可以不用密码登录了,出现password:的时候直接回车可以进入,不会出现ERROR 1045 (28000),但很多操作都会受限制,因为我们不能grant(没有权限)。按下面的流程走(红色部分为输入部分,绿色的是执行后显示的代码不用输入):
1.进入mysql数据库:
mysql> use mysql; Database changed
2.给root用户设置新密码,蓝色部分自己输入: mysql> update user set password=password("新密码") where user="root"; Query OK, 1 rows affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0
3.刷新数据库 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
4.退出mysql: mysql> quit Bye
改好之后,再修改一下my.ini这个文件,把我们刚才加入的"skip-grant-tables"这行删除,保存退出再重启mysql就可以了。
总结:猜测根本原因就是简单的密码输入错误,通过以上方法我们可以不验证密码来连接上mysql,然后设置新密码。
‘玖’ 如何通过python操作xampp里面的MySQL数据库
您好,
import
MySQLdb
try:
conn=MySQLdb.connect(host='localhost',user='root',passwd='root',port=3306)
cur=conn.cursor()
conn.select_db('python')
count=cur.execute('瞎脊select *
from test'磨仿渗)
print
'there has %s rows record' % count
result=cur.fetchone()
print
result
print
'ID: %s info %s' % result
results=cur.fetchmany(5)
for r in results:
print
r
print
'=='*10
cur.scroll(0,mode='absolute')
results=cur.fetchall()
for r in results:
print
r[1]
conn.commit()
cur.close()
conn.close()
except MySQLdb.Error,e:
print
"Mysql Error %d: %s"大握 % (e.args[0], e.args[1])
‘拾’ Python链接mssql出错
python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合)。
(1)、首先,要保证文件的开头要加上编码设置来说明文件的编码
复制代码代码如下:
#encoding=utf-8
(2)、然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号
复制代码代码如下:
conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')
(3)、设置仔漏python系统的默认编码(对于文件来说,这招几乎屡试不爽,呵呵~~)
复制代码代码如下:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
注意:上述编码是“utf8”,而不是“utf-8”,我也没弄明白,大部分情况下,这个无所谓的,但是这里我试了必须要是“utf8”
一个简单的完整的python连接mssqlserver的例子如下埋戚世(得安装pymssql包):
复制代码代码如下:
#encoding:utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import pymssql
try:
conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')
sql="select * from UserInfo"
cur=conn.cursor()
cur.execute(sql)
data=cur.fetchall()
conn.close()
print data
except Exception,e:
print e
运行结果如下:
复制代码代码如下:
[(u'20093501', u'\xb9\xf9\xbe\xb8', u'\u7537 ', 35, u'\xb4\xf3\xcf\xc0'),
(u'20093502', u'\xbb\xc6\xc8\xd8', u'\u5973 ', 34, u'\xc3\xc0\xc5\xae'),
(u'20093503', u'\xc1\xee\xba\xfc\xb3\xe5', u'\u7537 ', 25, u'2B\xc7\xe0\xc4\xea'),
(u'20093504', u'\xc8\xce\xd3\xaf\xd3\xaf', u'\u5973 ', 24, u'\xc6\xaf\xc1\xc1')]
[Finished in 0.2s]
虽然摆脱了问号和乱码的困扰,但这仍不是我们想要的结果,但这个确实是正确的,因为结果是utf8编码。这个现象确实诡异,请教了许多高手,得知,最好的结果就是逐个字段查询,才能显示中文,整个查询的话,会以utf8的格式显示出来。
上述代码中第14行data是整个查询的结果,如果指定某个具体的字段,如print data[0][2](表示取查询结果的第一行第三列的字段的值),则会输出中文。
其实不仅仅是mssqlserver数据库,mysql(需下载MySQLdb包)、sqllite(python自带的文件数据库)、mongodb(需下载PyMongo包)等或者是普通文本文弯肢件也是类似的解决方案。