Maison >développement back-end >Tutoriel Python >Explication détaillée de l'utilisation de Python pour faire fonctionner la base de données MySQL

Explication détaillée de l'utilisation de Python pour faire fonctionner la base de données MySQL

高洛峰
高洛峰original
2017-03-22 10:36:402783parcourir

Environnement de base : Python 3.5.1

version mysql : 5.6.35 (méthode d'installation tr/min)

Système d'exploitation : Centos7.3 et windows7

1 python. Introduction au module de base de données de connexion :

Actuellement, les principaux utilisés sont les suivants, MySQLdb et pymsql, ainsi que le pilote mysql-connector-python officiellement fourni par mysql. Le module MySQLdb est plus couramment utilisé dans. python2.X et python3.X J'utiliserai davantage pymsql et j'étudierai le mysql-connector-python officiel plus tard. Cet apprentissage et cette pratique sont tous basés sur le module pymsql.

L'utilisation de PyMySQL est presque la même que celle de MySQLdb. Si vous êtes habitué à utiliser MySQLdb, il vous suffit de modifier import MySQLdb pour importer pymysql.

2. Introduction à la méthode et aux paramètres de connexion de pymysql à la base de données :

pymysql se connecte à mysql Grâce à la méthode pymysql.connect(), de nombreux paramètres peuvent être ajustés :

 使用python操作mysql数据库详解

Exemple de connexion :

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

L'exemple de connexion comprend principalement des paramètres tels que l'hôte, l'utilisateur, le mot de passe et le port

Exemple de connexion 2 :

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

Il n'est pas nécessaire d'ajouter des paramètres tels que l'hôte, mais le format est fixe. L'hôte, l'utilisateur, le mot de passe et la base de données de connexion initiale ne peuvent pas être échangés,

L'exemple ci-dessus avec les paramètres est relativement plus simple.

Remarque : le port et le délai d'expiration de la connexion ici sont tous des entiers, donc aucun guillemet n'est nécessaire.

La fonction connect() renvoyée par l'objet de connexion :

 使用python操作mysql数据库详解

Dans le processus d'exploitation de la base de données mysql en Python, nous utilisons principalement les méthodes d'acquisition de curseur counect.cursor() et Cursor.execute() pour faire fonctionner la base de données, comme la création de bases de données et de tables de données. directement Connectez-vous simplement au client MySQL et exécutez l'instruction SQL, donc nos autres opérations sont des opérations telles que l'ajout, la suppression, la modification et la vérification

L'objet curseur fournit également plusieurs méthodes :

Explication détaillée de lutilisation de Python pour faire fonctionner la base de données MySQL

Exemple 1. Créez une bibliothèque pymysql connectée au serveur mysql à 192.168.186.157 Le jeu de caractères est utf8

#/usr/bin/env python

. #_*_coding :utf-8_*_

#Import pymysql module

import pymysql

#Utilisez la méthode pymysql.connect() pour créer un lien de base de données

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

#Utilisez la méthode con.cursor() pour créer un curseur

cursor =con.cursor()

sql=" créer une base de données s'il n'existe pas, le jeu de caractères par défaut pymysql utf8;"

'''sql="" "créer une table s'il n'existe pas de classe (id int (10) clé primaire auto_increment,

nom varchar(20) non nul, adresse varchar(20) non nulle par défaut "gansu")"""

'''

cursor.execute(sql)

cursor.execute("afficher les bases de données")

dataname=cursor.fetchall()

print(dataname)

Résultats de l'exécution :

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

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

Processus terminé avec le code de sortie 0

Exemple 2 : Connectez-vous à la base de données pymysql nouvellement créée pour créer une table de classe

#/usr/bin/env python

#_*_coding:utf-8_*_

#Importer le module pymysql

importer pymysql

#Utilisez la méthode pymysql.connect() pour créer un lien de base de données

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

#Utilisez la méthode con.cursor() pour créer un curseur

cursor=con.cursor()

#sql=" create base de données s'il n'existe pas, jeu de caractères par défaut pymysql utf8;"

sql="""créer une table s'il n'existe pas, classe (id int(10) clé primaire auto_increment,

nom varchar(20) not null, adresse varchar(20) ) non null par défaut "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 : Avertissement : (1050, "La table 'class' existe déjà")

result = self._query( requête)

Processus terminé avec le code de sortie 0

#/usr/bin/env python

#_*_coding:utf-8_*_

#Importer le module pymysql

importer pymysql

#Ouvrir le lien de la base de données

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

#Utilisez la méthode du curseur pour obtenir l'opération curseur

cursor=connect. curseur()

sql =''' insérer dans la classe (nom,adresse)

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

'''

#Utilisez la méthode d'exécution pour faire fonctionner la base de données

curseur .execute(sql)

#Transaction Submit

#connect.commit()

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

#Utilisez la méthode fetchall pour obtenir le résultat de l'opération

data=cursor.fetchmany(5)

print(data)

Remarque : la soumission de la transaction une partie est commentée ici, et je vais démontrer la situation de non-soumission de la transaction.

Résultat de l'exécution (pour la quatrième fois) :

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

((12 , 'curseur', 'exécuter'), (11, 'BON', 'contine'), (10, 'gagnant', 'retour'), ​​(9, 'JSP', 'go'))

Processus terminé avec le code de sortie 0

De là, nous constatons que la relation transactionnelle de la base de données est une partie très importante du processus de développement logiciel, nous devons donc être rigoureux lors du traitement des transactions.

Code source de la transaction validée :

#/usr/bin/env python

#_*_coding:utf-8_*_

#Import module pymysql

importer pymysql

#Ouvrir le lien de la base de données

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

#Utilisez la méthode du curseur pour obtenir l'opération curseur

cursor=connect.cursor( )

sql=''' insérer dans la classe (nom,adresse)

valeurs("JSP","go"),("winner","back"),("BON "," contine"),("cursor","execute");

'''

#Utilisez la méthode d'exécution pour faire fonctionner la base de données

cursor.execute(sql)

#Soumission de transaction

connectez-vous. commit()

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

#Utilisez la méthode fetchall pour obtenir le résultat de l'opération

data= slider.fetchall()

print(data)

#!/usr/bin/python

#encoding=utf-8

# -* - codage:utf-8 -*-

importer os

importer calendrier

importer dateheure

importer MySQLdb

importer os, 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_' msgstr '_0001_V2.xml','w ')

f1 = file('/home/haoren/nian/1550035_RELATIONACCOUNTINFO_' msgstr '_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 ):

essayez :

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

Sauf mysqldb.error, e:

Imprimer "mysql error%d:%s"%(e.args [0 ], e.args [e.args [e.args [ 1])

return ''

def getusercoin():

reqsql = "select * from singer_auth où status = 10 et ip !='NULL' AND (signtype = '1' OR signtype = '3') limit 150 ;"

#print reqsql

ret = sql_select(reqsql)

n = 0

pour la ligne en ret :

n = 1

si n                                                                                                                                                                                               print str(row[0])

                print str(row[2])

                print str(row[3])

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

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

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

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

                elif str(row[9]).strip() != '0' et  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]

        autre :

                n = 0

getusercoin()

f.close()

f1.close()

#!/usr /bin/env python

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

#明细

import MySQLdb

import os, sys, Re, String

Import Time, TarFile, getOPT

optmap = {

'dbuser': 'haoren',

'dbpass': 'fqdxhg4d ',

                'dbhost' : '192.168.1.10',

                'dbport' : 3306,

                'dbname' : 'JSDB'

                 }

def get_files(dir, pattern):

        res_file_list =[]

        if os.path.exists(dir):

                 cur_file_list = os. listdir(dir)

                pour file_name dans 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))

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

        pour op, valeur dans les opts :

                if op == '-d' :

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

si m:

                                cur_day = valeur

        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="CRÉER UNE TABLE SI N'EXISTE PAS `JIESUANTONGJI_%s` comme JIESUANTONGJISAMPLE"%tabletime

        db_conn.query(sql)

        db_conn.query("supprimer de JIESUANTONG JI_% s"%tabletime)

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

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

        file_list2=get_files(dirname,'billserver')

        pour le fichier2 dans 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), 客户获得人民币(8000), 平台获得人民币(2000),客户当前人民币(1320960)平台当前人民币(335560)

        pour une_ligne dans a_file.readlines():

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

                        if m:

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

                    #print "第二项 :" m.group(2 )

                #print "Le troisième élément : " m.group(3)

                    #print "Le quatrième élément :"                               #print "Le 5ème élément :"                       " m.group(5)

                                                                                                                                                 

                #print "Le huitième élément :" m.group(8)

                    #print "Le 9ème élément :"                            #print "Le 10ème élément :"                        " m.group(10)

                                                                                                                                🎜>

                                                                                                                                     print " Le quinzième élément : "m.group (15)

#print" 16ème élément : "m.group (16)

#print" item : "m. group(17)

                                                                                                                                                                                              (15)) >0:

a_file.close()

db_conn.commit()

db_cursor .close()

db_conn.close()

main()

#if __name__ == "__main__":

# main()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn