기본 환경: 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() 메서드를 사용하면 많은 매개 변수를 조정할 수 있습니다.
연결 예:
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 데이터베이스를 운영하는 과정에서는 주로 커서 획득 방식인 counect.cursor()와cursor.execute() 메소드를 사용하여 데이터베이스 생성, 데이터 테이블 생성 등의 데이터베이스 운영을 일반적으로 하고 있습니다. 직접 mysql 클라이언트에 연결하고 SQL 문을 실행하면 더 많은 작업이 추가, 삭제, 수정, 확인 및 기타 작업이 됩니다.
커서 개체는 여러 메서드도 제공합니다:
예제 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 = valueelse:
인쇄 "请输入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 중국어 웹사이트의 기타 관련 기사를 참조하세요!