Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Verwendung von Python zum Betrieb der MySQL-Datenbank

Detaillierte Erläuterung der Verwendung von Python zum Betrieb der MySQL-Datenbank

高洛峰
高洛峰Original
2017-03-22 10:36:402705Durchsuche

Basisumgebung: Python 3.5.1

MySQL-Version: 5.6.35 (RPM-Installationsmethode)

Betriebssystem: Centos7.3 und Windows7

1 Einführung in das Verbindungsdatenbankmodul:

Derzeit werden hauptsächlich die folgenden Module verwendet: MySQLdb und pymsql sowie der offiziell von MySQL bereitgestellte MySQLdb-Treiber python2.X und python3.X Ich werde mehr Pymsql verwenden und später den offiziellen MySQL-Connector-Python studieren. Dieses Lernen und diese Übung basieren alle auf dem Pymsql-Modul.

Die Verwendung von PyMySQL ist fast die gleiche wie die von MySQLdb. Wenn Sie an die Verwendung von MySQLdb gewöhnt sind, müssen Sie nur „import MySQLdb“ in „import pymysql“ ändern.

2. Einführung in die Methode und Parameter der Pymysql-Verbindung zur Datenbank:

Pymysql stellt eine Verbindung zu MySQL her. Mit der Methode pymysql.connect() können viele Parameter angepasst werden:

 使用python操作mysql数据库详解

Verbindungsbeispiel:

connect=pymysql.connect(host="192.168.186.157",port=3306,user="winner",passwd="123123", db="DB",charset="utf8",connect_timeout=3000)

Die Beispielverbindung umfasst hauptsächlich Parameter wie Host, Benutzer, Passwort und Port

Verbindungsbeispiel 2:

connect=pymysql.connect( "192.168.186.157", "winner", "123123", "test")

Es müssen keine Parameter wie Host hinzugefügt werden, aber das Format ist festgelegt. Der Host, der Benutzer, das Passwort und die anfängliche Verbindungsdatenbank können nicht ausgetauscht werden.

Das obige Beispiel mit Parametern ist relativ lockerer.

Hinweis: Der Port und das Verbindungszeitlimit sind hier alle int, daher sind keine Anführungszeichen erforderlich.

Die vom Verbindungsobjekt zurückgegebene connect()-Funktion:

 使用python操作mysql数据库详解

Beim Betrieb der MySQL-Datenbank in Python verwenden wir hauptsächlich die Cursor-Erfassungsmethoden counect.cursor () und Cursor.execute (), um die Datenbank zu betreiben, z. B. zum Erstellen von Datenbanken und Datentabellen Stellen Sie direkt eine Verbindung zum MySQL-Client her und führen Sie die SQL-Anweisung aus. Unsere weiteren Vorgänge sind das Hinzufügen, Löschen, Ändern, Überprüfen und andere Vorgänge.

Das Cursorobjekt bietet auch mehrere Methoden:

Detaillierte Erläuterung der Verwendung von Python zum Betrieb der MySQL-Datenbank

Beispiel 1. Verbinden Sie den MySQL-Server 192.168.186.157, um den PyMySQL-Bibliothekszeichensatz als utf8 zu erstellen

#/usr/bin/env python

#_* _coding :utf-8_*_

#Pymysql-Modul importieren

Pymysql importieren

#Verwenden Sie die Methode pymysql.connect(), um eine Datenbankverknüpfung zu erstellen

con=pymysql .connect(host='192.168.186.157',user='winner',passwd='123123',port=3306)

#Verwenden Sie die Methode con.cursor(), um einen Cursor zu erstellen

cursor =con.cursor()

sql=" Datenbank erstellen, wenn nicht vorhanden, pymysql-Standardzeichensatz utf8;"

'''sql="""Tabelle erstellen falls nicht vorhanden, Klasse (id int (10) Primärschlüssel auto_increment,

Name varchar(20) nicht null, Adresse varchar(20) nicht null Standard „gansu“)“““

' ''

cursor.execute(sql)

cursor.execute("Datenbanken anzeigen")

dataname=cursor.fetchall()

print( Datenname)

Ausführungsergebnisse:

(('information_schema',), ('#mysql50#2017-03-16_09-38-47',), ('DB',), ('mysql',), ('performance_schema',),

('pymysql',), ('test',), ('winner_mas',))

Prozess abgeschlossen mit Exit-Code 0

Beispiel 2: Verbinden Sie die neu erstellte PyMySQL-Datenbank, um eine Klassentabelle zu erstellen

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

pymysql importieren

#使用pymysql.connect()方法创建数据库链接

con=pymysql.connect(host='192.168.186.157',user='winner',passwd='123123',port=3306,db= 'pymysql')

#使用con.cursor()方法创建游标

cursor=con.cursor()

#sql="  create  database  If Not Exists   pymysql default Zeichensatz utf8;"

sql="""Tabelle erstellen, falls nicht vorhanden, Klasse (id int(10) Primärschlüssel auto_increment,

 Name varchar(20) nicht null, Adresse varchar(20 ) nicht null Standardwert "gansu")"""

cursor.execute(sql)

cursor.execute("show tables")

dataname=cursor.fetchall( )

print(dataname)

C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe C:/Users/Administrator/PycharmProjects/python/createdatabase.py

(('class',), )

C:UsersAdministratorAppDataLocalProgramsPythonPython35libsite-packagespymysqlcursors.py:166: Warnung: (1050, „Tabelle 'Klasse' existiert bereits“)

  result = self._query(query)

Prozess mit Exit-Code 0 abgeschlossen

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

pymysql importieren

#打开数据库链接

connect=pymysql.connect(host="192.168.186.157",port=3306,user="winner",passwd="123123" ,db="pymysql",charset="utf8",connect_timeout=3000)

#使用cursor方法获取操作游标

cursor=connect.cursor()

sql =''' insert into  class (name,address)

 values("JSP","go"),("winner","back"),("GOOD","contine"),( "cursor","execute");

'''

#使用execute方法操作数据库

cursor.execute(sql)

#事务提交

#connect.commit()  

data=cursor.execute("select * from class order by id desc" )

#使用fetchall方法获取操作结果

data=cursor.fetchmany(5)

print(data)

注意:在这里将事务提交的部分注释掉了,特演示一下不提交事务的情况。

执行结果(执行第四次时):

C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe. C:/Users/Administrator/PycharmProjects/python/insertmysql.py

(( 12, 'cursor', 'execute'), (11, 'GOOD', 'contine'), (10, 'winner', 'back'), (9, 'JSP', 'go'))

Prozess mit Exit-Code 0 abgeschlossen 

由此我们发现数据库的事务关系在软件开发的过程当中是相当重要的一部分,所以在对事务处理的时候需要严谨.

提交事务的源代码:

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

pymysql importieren

#打开数据库链接

connect=pymysql.connect(host="192.168.186.157",port=3306,user="winner",passwd="123123" ,db="pymysql",charset="utf8",connect_timeout=3000)

#使用cursor方法获取操作游标

cursor=connect.cursor()

sql =''' insert into  class (name,address)

 values("JSP","go"),("winner","back"),("GOOD","contine"),( „Cursor“, „Ausführen“);

'''

#Verwenden Sie die Ausführungsmethode, um die Datenbank zu betreiben

cursor.execute(sql)

#Transaktionsübermittlung

verbinden. commit()

data=cursor.execute("select * from class order by id desc" )

#Verwenden Sie die fetchall-Methode, um das Operationsergebnis zu erhalten

data= Cursor.fetchall()

print(data)

#!/usr/bin/python

#encoding=utf-8

# -* - Kodierung:utf-8 -*-

Betriebssystem importieren

Kalender importieren

Datum/Uhrzeit importieren

MySQLdb importieren

Betriebssystem importieren, sys, re,string

import time, tarfile,getopt

import socket

import struct

reload(sys)

sys .setdefaultencoding('utf- 8')

optmap = {

'dbuser': 'tongji',

'dbpass': '64CE0CEE9A85F22C',

'dbhost': '192.168.1.10',

'dbport': 3306,

'dbname': 'web_basic'

}

code='201613'

now = int(time.time())

msgid=code+str(now)

print msgid

f = file('/home /haoren/nian/1550035_ACCOUNT_'+msgid+'_0001_V2.xml','w+')

f1 = file('/home/haoren/nian/1550035_RELATIONACCOUNTINFO_'+msgid+'_0001_V2. xml','w+' )

def log(line):

line = line + "rn"

f.write(line)

return

def log1(line):

line = line + "rn"

f1.write(line)

return

def sql_select(reqsql) :

try:

db_conn = MySQLdb.connect(user=optmap['dbuser'], passwd=optmap['dbpass'], host=optmap[' dbhost'], port= optmap['dbport'], db=optmap['dbname'], charset='utf8')

db_cursor=db_conn.cursor()

db_conn.query ("use %s" %optmap['dbname'])

count = db_cursor.execute(reqsql)

ret = db_cursor.fetchall()

db_cursor.close ()

db_conn.close

return ret

außer MySQLdb.Error,e:

print „Mysql ERROR %d:%s“ %( e.args[0] , e.args[1])

return ''

def getusercoin():

reqsql = "select * from Singer_auth where status = 10 und ip !=' NULL' AND (signtype = '1' OR signtype = '3') limit 150 ;"

#print reqsql

ret = sql_select(reqsql)

n = 0

für Zeile in ret:

n += 1

wenn n

print str(row[ 1])+', '+str (Zeile [8])

Str (Zeile [0]) drucken

Str (Zeile [1])

drucken

                print str(row[2])

                print str(row[3])

                if str(row[9]).strip() == '0' and str (row[10]).strip() == '0':

                        print str(row[9]) +','+ str(row[10])

                elif str (row[9]).strip() == '0' and str(row[10]).strip() != '0':

                        print str(row[9]) +', '+str(row[10]).split('/')[6]

                elif str(row[9]).strip() != '0' und  str(row[10]) .strip() == '0':

                        print str(row[9]).split('/')[6] +','+str(row[10])

                else:

                        print str(row[9]).split('/')[6] +','+str(row[10]).split('/')[6]

        else:

                n = 0

getusercoin()

f.close()

f1.close()

#!/usr/bin/env python

#-*-coding:utf-8-*-

#明细

MySQLdb importieren

import os, sys, re,string

import time, tarfile,getopt

optmap = {

                'dbuser' : 'haoren',

                'dbpass': 'FqDxhG4d',

                'dbhost': '192.168.1.10',

                'dbport': 33 06,

                'dbname' : 'JSDB '

                 }

def get_files(dir, pattern):

        res_file_list =[]

        if os.path.exists(dir):

                cur_file_list = os.listdir(dir)

              für Dateiname in cur_file_list:

                      if re.search(pattern, file_name):

                                res_file_list.append(file_name )

                return res_file_list

        else:

              return 'no'

def main():

        cur_day = time.strftime( "%Y%m%d", time.localtime(time.time()-86400))

        opts, args = getopt.getopt(sys.argv[1:], 'd:')

        für op, Wert in opts:

                if op == '-d':

                        m = re.search('[0-9]{8}', value)

                        if m:

                                cur_day = value

                        else:

                            print. „请输入8位日期(比如:20130215)“

                                return 'no'

        log_day = time.strftime('%y% m%d', time.localtime(time.mktime(time.strptime(cur_day, '%Y%m%d'))))

        fmt_day = time.strftime('%Y-%m- %d', time.localtime(time.mktime(time.strptime(cur_day, '%Y%m%d'))))

        print '结算统计日期:',fmt_day

        #log_day = time.strftime("%y%m%d", time.localtime(time.time()-86400))

        dirname="/home/haoren/logdir/%s_67"% log_day

        print dirname

        db_conn = MySQLdb.connect(user=optmap['dbuser'], passwd=optmap['dbpass'], host=optmap['dbhost'], port= optmap['dbport'], db=optmap['dbname'])

        db_cursor=db_conn.cursor()

        db_conn.query("use %s"%optmap['dbname' ])

        tabletime = time.strftime("%y%m%d", time.localtime(time.mktime(time.strptime(cur_day, "%Y%m%d")))))

        sql="TABELLE ERSTELLEN, WENN NICHT EXISTIERT `JIESUANTONGJI_%s` like JIESUANTONGJISAMPLE"%tabletime

      db_conn.query(sql)

        db_conn.query("delete from. J IESUANTONGJI_% s"%tabletime)

        if os.path.exists("/tmp/JieSuanTongJi2016.txt"):

                os.system("rm -f /tmp/JieSuanTongJi2016.txt")

        file_list2=get_files(dirname,'billserver')

       für Datei2 in file_list2:

                command = "cat %s/%s | grep -h -w  结算统计 |grep -v 人民币消费结算统计  >> /tmp/JieSuanTongJi2016.txt"%(dirname,file2)

                os.system(command)

        #结算统计记录放在txt文档里面

        filename='/ tmp/JieSuanTongJi2016.txt'

        record = {}

        a_file = open(filename, 'r')

        #160125-11:00:14 Bill[40268] INFO: [结算统计]时间(1453690814)类别(1)名称(购物卡收入)平台(3977962)等级(2)用户(65147500)赠送(1)个购物卡(39)给客户(65147500),客户等级(28), 签约(1), 100, 8000, 1320960台当前人民币(335560)

        für a_line in a_file.readlines():

                        m = re.search("^(S+) Bill[d+]  INFO: [结算统计]时间((d+))类别((d+))名称((S+) )平台((d+))等级((d+))用户((d+))赠送((d+))个购物卡((d+))给客户((d+)),客户等级((d+)),签约((d+))人民币((d+))", a_line)

                        if m:

                  #print "第一项:"+m.group(1)

                  # print „第二项:“+m.group (2)

Element: "+M.Group (5)

) #print" Der 10. Artikel: "+M.Group (10)

#print" Der 11. Element: "++ m.group(11)

                                                                                                                                                                   (14)

                                                                                                                                                                     

                #print "Das 17. Element:"+m. group(17)

                #print "Das 18. Element:"+m.group(18)

                              if int( m.group(14)) >0 or int(m.group (15)) >0 :

                                           CHANNELRECVGOLD,CURRENTSINGERGOLD,CURRENTCHANNELGOLD) Werte(% d,%d,'%s',%d,%d,%d,%d,%d ,%d,%d,%d,%d,%d,%d,%d,%d)" %(tabletime,int(m.group(2)),int(m.group(3)), str(m.group(4)),int(m.group(5)),int(m.group( 6)),int(m.group(7)),int(m.group(8)), int(m.group(9)),int(m.group(10)),int(m.group( 11)),int(m.group(12)),int(m.group(13)), int(m.group(14)),int(m.group(15)),int(m.group( 16)),int(m.group(17))))

a_file.close ()

db_conn.commit()

db_cursor.close()

db_conn.close()

main()

#if __name__ == "__main__":

# main()

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Python zum Betrieb der MySQL-Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn