>  기사  >  백엔드 개발  >  Python을 사용하여 mysql 데이터베이스를 작동하는 방법에 대한 자세한 설명

Python을 사용하여 mysql 데이터베이스를 작동하는 방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-03-22 10:36:402760검색

기본 환경: Python 3.5.1

mysql 버전: 5.6.35(rpm 설치 방법)

운영 체제: Centos7.3 및 windows7

1. 연결 데이터베이스 모듈 소개:

현재 주로 사용되는 것은 MySQLdb와 pymsql이며, mysql에서 공식적으로 제공하는 mysql-connector-python 드라이버도 MySQLdb 모듈이 더 일반적으로 사용됩니다. python2.X, python3.X pymsql을 더 많이 사용하고 나중에 공식 mysql-connector-python을 공부할 예정입니다. 이 학습과 실습은 모두 pymsql 모듈을 기반으로 합니다.

PyMySQL의 사용법은 MySQLdb와 거의 동일합니다. MySQLdb를 사용하는 데 익숙하다면 import MySQLdb를 import pymysql로 ​​변경하면 됩니다.

2. 데이터베이스에 연결하는 pymysql의 메서드 및 매개 변수 소개:

pymysql이 mysql에 연결 pymysql.connect() 메서드를 사용하면 많은 매개 변수를 조정할 수 있습니다.

 使用python操作mysql数据库详解

연결 예:

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

예제 연결에는 주로 호스트, 사용자, 비밀번호 및 포트와 같은 매개변수가 포함됩니다.

연결 예 2:

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

host 등의 매개변수를 추가할 필요는 없지만 형식은 고정되어 있습니다. 호스트, 사용자, 비밀번호 및 초기 연결 데이터베이스는 상호 교환할 수 없습니다.

위의 매개변수 예는 비교적 캐주얼합니다.

참고: 여기의 포트 및 연결 시간 제한은 모두 int이므로 따옴표가 필요하지 않습니다.

연결 개체가 반환한 connect() 함수:

 使用python操作mysql数据库详解

Python에서 mysql 데이터베이스를 운영하는 과정에서는 주로 커서 획득 방식인 counect.cursor()와cursor.execute() 메소드를 사용하여 데이터베이스 생성, 데이터 테이블 생성 등의 데이터베이스 운영을 일반적으로 하고 있습니다. 직접 mysql 클라이언트에 연결하고 SQL 문을 실행하면 더 많은 작업이 추가, 삭제, 수정, 확인 및 기타 작업이 됩니다.

커서 개체는 여러 메서드도 제공합니다:

Python을 사용하여 mysql 데이터베이스를 작동하는 방법에 대한 자세한 설명

예제 1. 192.168.186.157의 mysql 서버에 연결된 pymysql 라이브러리를 생성합니다. 문자 집합은 utf8

#/usr/bin/env python

# _*_coding :utf-8_*_

#pymysql 모듈 가져오기

pymysql 가져오기

#pymysql.connect() 메서드를 사용하여 데이터베이스 링크 생성

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

#con.cursor() 메소드를 사용하여 생성 커서

cursor =con.cursor()

sql=" 존재하지 않는 경우 데이터베이스 생성 pymysql 기본 문자 집합 utf8;"

'''sql=""" 존재하지 않는 경우 테이블 생성 클래스(id int (10) 기본 키 auto_increment,

이름 varchar(20) not null, 주소 varchar(20) not null 기본값 "gansu")"""

'''

cursor.execute(sql)

cursor.execute("데이터베이스 표시")

dataname=cursor.fetchall()

print(dataname)

실행 결과:

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

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

프로세스 종료 코드 0으로 완료

예 2: 새로 생성된 pymysql 데이터베이스에 연결하여 클래스 테이블 생성

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

pymysql 가져오기

#使용pymysql.connect()방법법创建数据库链接

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

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

cursor=con.cursor()

#sql="  데이터베이스 생성  존재하지 않는 경우   pymysql 기본값 문자 집합 utf8;"

sql="""존재하지 않는 경우 테이블 만들기 클래스(id int(10) 기본 키 auto_increment,

 name varchar(20) not null ,address varchar(20 ) null이 아님 기본값 "gansu")"""

cursor.execute(sql)

cursor.execute("show tables")

dataname=cursor.fetchall( )

인쇄(데이터 이름)

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

(('class',), )

C:UsersAdministratorAppDataLocalProgramsPythonPython35libsite-packagespymysqlcursors.py:166: 경고: (1050, "테이블 '클래스'가 이미 존재합니다.")

  결과 = self._query(query)

종료 코드 0으로 프로세스 완료

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

pymysql 가져오기

#打开数据库链接

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 =''' 클래스(이름,주소)

에 삽입 값("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)

인쇄(데이터)

주의 사항: 여기에서 더 자세히 보기 。

c : usersAdMinStratorAppDataloCalProgramSpythonpython35python.exe c : /users/Administrator/pycharmprojectss/python/insertmysql.py (() ((). 12, '커서', '실행'), (11, 'GOOD', 'contine'), (10, '승자', '뒤로'), (9, 'JSP', 'go')) 提交事务的源代码:

#/usr/bin/env python

#_*_coding:utf-8_*_

#导入pymysql模块

pymysql 가져오기

#打开数据库链接

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 =''' 클래스(이름,주소)

에 삽입 값("JSP","go"),("winner","back"),("GOOD","contine"),( "커서", "실행");

'''

#execute 메소드를 사용하여 데이터베이스를 운영

cursor.execute(sql)

#트랜잭션 제출

connect. commit()

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

#작업 결과를 얻으려면 fetchall 메서드를 사용하세요

data= cursor.fetchall()

인쇄(데이터)

#!/usr/bin/python

#encoding=utf-8

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

os 가져오기

캘린더 가져오기

날짜/시간 가져오기

MySQLdb 가져오기

os 가져오기, sys, re,string

가져오기 시간, tarfile,getopt

소켓 가져오기

구조체 가져오기

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)

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) :

시도:

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 ("%s 사용" %optmap['dbname'])

count = db_cursor.execute(reqsql)

ret = db_cursor.fetchall()

db_cursor.close ()

db_conn.close

return ret

제외 MySQLdb.Error,e:

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

return ''

def getusercoin():

reqsql = "singer_auth에서 * 선택 여기서 상태 = 10 및 ip !=' NULL' AND (signtype = '1' OR signtype = '3') 제한 150 ;"

#print reqsql

ret = sql_select(reqsql)

n = 0

ret의 행:

n += 1

if n

인쇄 str(row[ 1])+', '+str(행 [8])

Str 인쇄(행 [0])

Str 인쇄([1]행)

                print str(row[2])

                print str(row[3])

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

                        인쇄 str(row[9]) +','+ str(row[10])

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

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

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

                        인쇄 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 가져오기

import os, sys, re,string

import time, tarfile,getopt

optmap = {

                'dbuser' : 'haoren',

                'db이름' : 'JSDB '

                 }

def get_files(dir, 패턴):

        res_file_list =[]

        if os.path.exists(dir):

                cur_file_list = os.listdir(dir)

                for file_name 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 = 시간.strf시간( "%Y%m%d", time.localtime(time.time()-86400))

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

        op의 경우 opts의 값:

                if op == '-d':

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

                        if m:

                                cur_day = value

                      else:

                              인쇄 "请输入8位日期(比如:20130215)"

                                '아니요' 반환

        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

        인쇄 디렉토리 이름

        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("%s 사용"%optmap['dbname' ])

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

        sql="JIESUANTONGJISAMPLE"%tabletime과 같이 `JIESUANTONGJI_%s`가 존재하지 않는 경우 테이블 생성

        db_conn.query(sql)

        db_conn.query("JIES에서 삭제 우안통지_% s"%tabletime)

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

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

        file_list2=get_files(dirname,'billserver')

        for file_list2의 file2:

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

                os.system(명령)

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

        파일 이름='/ tmp/JieSuanTongJi2016.txt'

        레코드 = {}

        a_file = open(파일 이름, 'r')

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

        for a_line in a_file.readlines():

                        m = re.search("^(S+) Bill[d+]  INFO: [结算统计]时间((d+))类别((d+))name称((S+) )평형((d+))等级((d+))사용户((d+))赠送((d+)) ((d+)), 消耗人民币((d+)), 客户获得人民币((d+)), 平台获得人民币((d+)),客户当前人民币((d+))平台当前人民币((d+))", a_line)

                        if m:

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

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

                #print "세 번째 항목:"+m.group(3)

                    #print "네 번째 항목:"+m.group(4)

                                                                  항목: "+m .group(5)

                                                                                          > #print "11번째 항목:"+m.group(11)

                                           :"+m.group(12)

                                       ~ ~ > 14)) >0 또는 int(m.group (15)) >0 :

                                       (OPTIME,TYPE,ITEMNAME,CHANNELID,CHANNELLEVEL ,PRESENTERID,ITEMNUM,ITEMID,SINGERID,SINGERLEVEL,SIGN,CONSUMECOIN,SING ERRECVGOLD,CHANNELRECVGOLD,CURRENTSINGERGOLD,CURRENTCHANNELGOLD) 값(% 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()

위 내용은 Python을 사용하여 mysql 데이터베이스를 작동하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.