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包)等或者是普通文本文彎肢件也是類似的解決方案。