ホームページ >バックエンド開発 >Python チュートリアル >Pythonを使ってmysqlデータベースを操作する方法を詳しく解説
基本環境:Python 3.5.1
mysqlバージョン:5.6.35(rpmインストール方法)
オペレーティングシステム:Centos7.3とwindows7
1 Python接続データベースモジュールの紹介:
現在主に使用されているものは次のとおりです。次の MySQLdb、pymsql、および mysql によって公式に提供される mysql-connector-python ドライバーです。MySQLdb モジュールは python2.X でより一般的に使用されますが、python3.X ではより多くの pymsql が使用されます。公式の mysql-connector-python については後で説明します。 , この学習と実践はすべて pmsql モジュールに基づいています。
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 データベースを操作するプロセスでは、主にget を使用します。 カーソル メソッド counect.cursor() およびcursor.execute() は、データベースやデータ テーブルの作成など、データベース上で動作します。そのため、カーソルの操作はさらに増えます。オブジェクトには、追加、削除、変更、確認などの操作のためのメソッドもいくつか用意されています。
例 1. 192.168.186.157 の mysql サーバーに接続して、pymysql ライブラリを作成します。文字セットは utf8#/usr です。 / bin/env python
#_*_coding:utf-8_*_
#pymysqlモジュールをインポート
import 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="""存在しない場合はテーブルを作成 class (id int(10) 主キー auto_increment,
name varchar(20) not null 、address varchar(20) not null デフォルト "gansu")"""
'''
cursor.execute(sql)
cursor.execute("show Databases")
dataname=cursor.fetchall()
print(dataname)
実行結果:
(('information_schema',), ('#mysql50#2017-03-16_09-38-47',), ('DB',), ('mysql' ,), ('performance_schema' ,),
('pymysql',), ('test',), ('winner_mas',))
プロセスは終了コード 0 で終了しました
例 2. just に接続しますクラステーブルを作成するためにpymysqlデータベースを作成しました
#/usr/bin/env python
#_*_coding:utf-8_*_
#pymysqlモデ入力
import pymysql
#使用pymysql.connect()メソッドql. connect(host='192.168.186.157',user='winner',passwd='123123',port=3306,db='pymysql')
#usecon.cursor() メソッド创建游标
cursor=con。 cursor()
#sql=" 存在しない場合はデータベースを作成 pymysql デフォルト文字セット utf8;"
sql="""存在しない場合はテーブルを作成 class (id int(10) 主キー auto_increment,
name varchar(20) ) null ではありません、address varchar(20) null ではありませんデフォルト "gansu")"""
cursor.execute(sql)
cursor.execute("show tables")
dataname=cursor.fetchall()
print (dataname)
c:usersadministratorappdatalocalprogrampythonpython.exe c:/users/administrator/pycharmprojects/createdatabase警告:( 1050, "テーブル 'class' はすでに存在します")
result = self._query(query)
終了コード 0 でプロセスが終了しました
#/usr/bin/env python
#_*_coding:utf-8_* _
#导入pymysql模块
import pymysql
#打开数据库链接
connect=pymysql.connect(host="192.168.186.157",port=3306,user="winner",passwd="123123") ,db ="pymysql",charset="utf8",connect_timeout=3000)
#usecursor メソッド获取操作游标
cursor=connect.cursor()
sql=''' クラス (名前,アドレス) に挿入します
value("JSP","go"),("winner","back"),("GOOD","contine"),("cursor","execute");
'''
#使用実行メソッド操作数据库
cursor.execute(sql)
#事务提交
#connect.commit()
data=cursor.execute("select * from class order by id desc" )
#usefetchallメソッド操作の結果を取得します
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'))
プロセスは終了コード 0 で終了しました
取引のソースコード:
#/usr/bin/env python
#_*_coding:utf-8_*_
# pymysql模試块
import pymysql
#打开数据库链接
connect=pymysql.connect(host="192.168.186.157",port=3306,user="winner",passwd="123123",db="pymysql") ,charset="utf8",connect_timeout=3000)
#usecursor メソッド获取操作游标
cursor=connect.cursor()
sql=''' insert into class (name,address)
values("JSP ","ゴー"),("勝者","バック"),("グッド","継続"),("カーソル","実行");
'''
#データベースを操作するにはexecuteメソッドを使用します
cursor.execute(sql)
#トランザクション送信
connect.commit()
data=cursor.execute("select * from class order by id desc" )
#fetchallメソッドを使用して演算結果を取得します
data=cursor.fetchall()
print(data)
#!/usr/bin/python
#encoding=utf-8
# -*- コーディング : UTF-8-*-
IMPORT OS
import Calendar
import Datetime
import mysqldb
import OS, SYS, Re, String
import Time, Tarfile, gettopt
import
import
CT
reload(sys)
sys.setdefaultencoding('utf-8')
optmap = {
'dbuser': 'tongji',
'dbpass': '64CE0CEE9A85F22ち、
'dbhost': ' 192.168 .1.10',
'dbport': 3306,
'dbname': 'web_basic'
}
code='201613'
now = int(time.time())
msgid=code+str (現在)
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 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 and ip !='NULL' AND (signtype = '1' ORsigntype = '3') limit 150 ;" #print reqsql ret = sql_select (reqsql) n = 0 for row in ret: n += 1 if n print str(row[1])+','+str (row [8])print str(row [0])print str(row[2])
print str(row[3])
if str(row[9]).strip() == '0' および 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' および 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-*-
#明细
import MySQLdb
import os, sys, re,string
インポート時間, 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)
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 = time.strftime("%Y%m%d" 、time.localtime(time.time()-86400))
opts, args = getopt.getopt(sys.argv[1:], 'd:')
optsの値:
if op == '-d':
m = re.search('[0-9]{8}', value)
if m:
cur_day = 値
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="JIESUANTONGJISAMPLE のような `JIESUANTONGJI_%s` が存在しない場合はテーブルを作成します"%tabletime
db_conn.query(sql)
db_conn.query("JIESUANTONGJI_%s から削除" %tabletime)
os.path の場合。存在します("/tmp/JieSuanTongJi2016.txt"):
os.system("rm -f /tmp/JieSuanTongJi2016.txt")
file_list2=get_files(dirname,'billserver')
file_list2 の file2:
command = "猫 %s/%s | grep -h -w 計算统计 |grep -v 人民币消费計算统计 >> /tmp/JieSuanTongJi2016.txt"%(dirname,file2)
os.system(command)
#结算统计记录放在txt文档里面
filename= '/tmp/JieSuanTongJi2016.txt'
レコード = {}
a_file = open(filename, 'r')
#160125-11:00:14 Bill[40268] 情報: [结算统计] 時間间(1453690814)类别(1)名前(购物卡收)入)平台(3977962)等级(2)用户(65147500)赠送(1)个(39)给(65147500)、客户(28)、签约(1)、消耗(100)、客户(8000)、平台平台人民币(2000),客户当前人民币(1320960)平台当前人民币(335560)
for a_line in a_file.readlines():
m = re.search("^(S+) Bill[d +] 情報: [结算统计] 時間((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 "3 番目の項目:"+m.group(3)
「#Print」 6 番目の項目: 「+M.Group (6)
#print」 7 番目の項目: 「+m.group (7)
」#print" 8 番目: "+m.group (8 )
(11)
「グループ(14)
「10 番目の項目:」+m.group(17)
(15) ) >0 :
RESENTERID、ITEMNUM、ITEMID、SINGERID、SINGERLEVEL、SIGN、CONSUMECOIN、S INGERRECVGOLD,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(6)) group(8))、int(m.group(9))、int(m.group(10))、int(m.group(11))、int(m.group(12))、int(m.group(11)) group(13)),int(m.group(14)),int(m.group(15)),int(m.group(17))))
,
main()
#if __name__ == "__main__":
# main()
以上がPythonを使ってmysqlデータベースを操作する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。