Pythonでデータベースを操作する方法
コンピュータの専门あるいはすでに仕事に参加した学友はすべて知っているべきで、1つのPythonの言语だけができるのは往々にして足りないので、データベースは私达の肝心な技能の1つで、本文は主にPythonがどのようにデータベース(Mysql)と简単なsql文に接続することを说明するためです.sqlに関する質問も、私との伝言交流を歓迎します.
ダウンロード
1.導入モジュールのインストールインストール
Windowsにmysqlモジュールをインストールする
Linuxにmysqlモジュールをインストールする
ファイルにモジュールを導入 2.Connectionオブジェクトデータベースへの接続の確立 作成オブジェクト:呼び出し パラメータhost:接続されたmysqlホスト、ネイティブが「localhost」 パラメータport:接続されたmysqlホストのポート、デフォルトは3306 パラメータdb:データベースの名前 パラメータuser:接続されたユーザー名 パラメータpassword:接続パスワード パラメータcharset:通信で採用される符号化方式は、デフォルトでは「gb 2312」であり、データベース作成時に指定された符号化と一致することが要求される.そうしないと、中国語は文字化されない 3.対象の方法 Cursorオブジェクト実行sql文 オブジェクトの作成:Connectionオブジェクトを呼び出す オブジェクトのメソッド を返します. が返されます. を取得します. に戻るmodeのデフォルト値はrelativeで、現在の行に基づいてvalueに移動し、valueが正則的に下に移動し、valueが負の場合は上に移動することを示します.相対的 modeの値はabsoluteであり、第1のデータに基づく位置を示し、第1のデータの位置は0であり、絶対的である.
例を挙げて分かりやすい
4.オブジェクトのプロパティrowcount読取り専用属性は、前回 を表す接続先取得
添削して調べる.
1.増加testInsertを作成pyファイル、学生表にデータを挿入
2.修正testUpdateを作成する.pyファイル、学生表のデータを変更
3.削除testDeleteを作成する.pyファイル、学生表のデータを削除
4.調べるtestSelectOneを作成する.pyファイル、学生情報を検索
testSelectManyを作成する.pyファイル、すべての学生情報を検索
インスタンス1:パラメータ
例2:例外の放出
例3:
パッヶージ
呼び出しのたびに簡単にpyファイルをカプセル化できます.このライブラリを
テスト
1.クエリーの複数のデータのテスト
2.クエリーデータのテスト
3.テスト添削
4.簡単なログインと登録
プロジェクトをするときにログインや登録を試みるときにパスワードを暗号化して保存し、sql文と組み合わせて簡単なインタラクションを行う必要があります.
注意:パスワードを暗号化する必要がある md 5暗号化を使用する場合、パスワードには32文字 が含まれます.sha 1暗号化を使用する場合、パスワードには40文字が含まれます.ここでは、この方法 を使用します.
ログインと登録
実際のプロジェクトのログイン登録には様々な検証が加わることが多いが、ここのコードは簡単なログイン登録であり、コミュニケーションを学ぶためだけである.
ダウンロード
1.導入モジュールのインストール
mysql
モジュール、windows
およびubuntu
でWindowsにmysqlモジュールをインストールする
Linuxにmysqlモジュールをインストールする
import pymysql
connect()
メソッドconn=connect
(パラメータリスト)close()
接続を閉じるcommit()
トランザクションが有効になるには、コミットが必要ですrollback()
トランザクション、破棄前のアクションcursor()
は、sql文を実行して結果を得るためにCursorオブジェクトを返しますcursor()
メソッドcursor1=conn.cursor()
close()
クローズexecute(operation [, parameters ])
実行文、影響を受ける行数fetchone()
クエリー文を実行すると、クエリー結果セットの最初のローデータが取得され、メタグループnext()
クエリー文を実行すると、現在の行の次の行fetchall()
クエリーを実行すると、結果セットのすべての行が取得され、1行が1つのメタグループを構成し、これらのメタグループを1つのメタグループにロードしてscroll(value[,mode])
行ポインタをある位置に移動mode
移動を表す方式例を挙げて分かりやすい
# python mysql
import pymysql
#
conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='python01', port=3306, charset='utf8')
#
cur = conn.cursor()
# sql ,
#sql = 'select birthday from t_user'
sql = 'select id,name,pwd,birthday from t_user'
# , 。 , , ,
count = cur.execute(sql)
print(' %s '%count)
#
dateOne = cur.fetchone()
print(dateOne)
#
cur.scroll(-1)
#
cur.scroll(1)
cur.scroll(1,mode='absolute') ,
cur.scroll(1,mode='relative')
#
dataAll = cur.fetchall()
print(dataAll)
for temp in dataAll:
print(temp)
print(dataAll[-1][2]) #dataAll[-1] ,dataAll[-1][2]
for temp in cur:
print(temp)
s = 'id:%s,name:%s,pwd:%s,birthday:%s'
for temp in dataAll:
print(s%(temp[0],temp[1],temp[2],temp[3]))
#
cur.close()
conn.close()
4.オブジェクトのプロパティ
execute()
実行後に影響を受けた行数添削して調べる.
1.増加
#encoding=utf-8
import pymysql
try:
conn=pymysql.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')
cs1=conn.cursor()
count=cs1.execute("insert into students(sname) values(' ')")
print(count)
conn.commit()
cs1.close()
conn.close()
except Exception,e:
print(e)
2.修正
#encoding=utf-8
import pymysql
try:
conn=pymysql.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')
cs1=conn.cursor()
count=cs1.execute("update students set sname=' ' where id=6")
print(count)
conn.commit()
cs1.close()
conn.close()
except Exception,e:
print(e)
3.削除
#encoding=utf-8
import pymysql
try:
conn=pymysql.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')
cs1=conn.cursor()
count=cs1.execute("delete from students where id=6")
print(count)
conn.commit()
cs1.close()
conn.close()
except Exception as e:
print(e)
4.調べる
import Pymysql
try:
conn=Pymysql.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')
cur=conn.cursor()
cur.execute('select * from students where id=7')
result=cur.fetchone()
print result
cur.close()
conn.close()
except Exception as e:
print(e)
#encoding=utf8
import Pymysql
try:
conn=Pymysql.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')
cur=conn.cursor()
cur.execute('select * from students')
result=cur.fetchall()
print result
cur.close()
conn.close()
except Exception as e:
print(e)
インスタンス1:パラメータ
# python mysql
import pymysql
import time
#
conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='python01', port=3306, charset='utf8')
#
cur = conn.cursor()
# sql , ,sql
sql = 'insert into t_user(name,pwd,birthday) values(%s,%s,%s)'
#
name = input(' :')
pwd = input(' :')
birthday = input(' :') # 2017 10 01 --> struct_time(--->2017-10-01)
birthday = time.strptime(birthday,'%Y %m %d ') # ( MySQL )
params = [name,pwd,birthday]
# , 。 , , ,
count = cur.execute(sql,params)
#
conn.commit()
print(' :%s'%count)
#
cur.close()
conn.close()
例2:例外の放出
# python mysql
import pymysql
try:
conn = None
cur = None
#
conn = pymysql.connect(host='127.0.0.1',
user='root',
password='123456',
database='python01',
port=3306,
charset='utf8')
#
# a = 1 / 0
#
cur = conn.cursor()
# sql ,
sql = 'insert into t_user(name,pwd,birthday) values(" ","123456",str_to_date("2017 10 20 ","%Y %m %d "))'
# , 。 , , ,
count = cur.execute(sql)
#
conn.commit()
print(' :%s' % count)
except Exception as ex:
# , , ,
print(str(ex))
#
# raise
finally:
if cur != None:
cur.close()
if conn != None:
conn.close()
例3:
# python mysql
import pymysql
#
conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', database='python01', port=3306, charset='utf8')
#
cur = conn.cursor()
# sql ,
#sql = 'select birthday from t_user'
sql = 'select id,name,pwd,birthday from t_user'
# , 。 , , ,
count = cur.execute(sql)
print(' %s '%count)
#
# dateOne = cur.fetchone()
# print(dateOne)
# for temp in cur:
# print(temp)
s = 'id:%s,name:%s,pwd:%s,birthday:%s'
for temp in dataAll:
print(s%(temp[0],temp[1],temp[2],temp[3]))
#
cur.close()
conn.close()
パッヶージ
呼び出しのたびに簡単にpyファイルをカプセル化できます.このライブラリを
mySqlHelper
と定義します."""
python mysql
1、 ,
2、
1、
2、sql ,
3、
"""
import pymysql
class MysqlHelper:
'''python mysql '''
def __init__(self, host, user, password, database, port=3306, charset='utf8'):
'''
:param host:
:param user:
:param password:
:param database:
:param port: , 3306
:param charset: , utf8
'''
self.host = host
self.port = port
self.database = database
self.user = user
self.password = password
self.charset = charset
def connect(self):
'''
:return:
'''
self.conn = pymysql.connect(host=self.host,
user=self.user,
password=self.password,
database=self.database,
port=self.port,
charset=self.charset)
self.cur = self.conn.cursor()
def fetchone(self, sql, params=None):
'''
sql
:param sql: sql
:param params: sql , None
:return:
'''
dataOne = None
try:
count = self.cur.execute(sql, params)
if count != 0:
dataOne = self.cur.fetchone()
except Exception as ex:
print(ex)
finally:
self.close()
return dataOne
def fetchall(self, sql, params=None):
'''
sql
:param sql: sql
:param params: sql , None
:return:
'''
dataall = None
try:
count = self.cur.execute(sql, params)
if count != 0:
dataall = self.cur.fetchall()
except Exception as ex:
print(ex)
finally:
self.close()
return dataall
def __item(self, sql, params=None):
'''
:param sql: sql
:param params: sql , None
:return:
'''
count = 0
try:
count = self.cur.execute(sql, params)
self.conn.commit()
except Exception as ex:
print(ex)
finally:
self.close()
return count
def update(self, sql, params=None):
'''
:param sql: sql
:param params: sql , None
:return:
'''
return self.__item(sql, params)
def insert(self, sql, params=None):
'''
:param sql: sql
:param params: sql , None
:return:
'''
return self.__item(sql, params)
def delete(self, sql, params=None):
'''
:param sql: sql
:param params: sql , None
:return:
'''
return self.__item(sql, params)
def close(self):
'''
'''
if self.cur != None:
self.cur.close()
if self.conn != None:
self.conn.close()
テスト
1.クエリーの複数のデータのテスト
import mysqlHelper
#
helper = mysqlHelper.MysqlHelper('127.0.0.1', 'root', '123456', 'python01')
#
helper.connect()
# sql
sql = 'select * from t_user where name = %s and id > %s'
# params
params = [' ',1]
#
data = helper.fetchall(sql, params)
#
if data:
for temp in data:
print(temp)
else: # None,False,0
print(' .')
helper.close()
2.クエリーデータのテスト
import mysqlHelper
#
helper = mysqlHelper.MysqlHelper('127.0.0.1', 'root', '123456', 'python01')
#
helper.connect()
# sql
sql = 'select * from t_user where id = %s'
#sql = 'select * from t_user where id = 1'
# params
params = [2]
#
data = helper.fetchone(sql, params)
#data = helper.fetchone(sql)
#
if data:
print(data)
else: # None,False,0
print(' .')
3.テスト添削
import mysqlHelper
import time
#
helper = mysqlHelper.MysqlHelper('127.0.0.1', 'root', '123456', 'python01')
#
helper.connect()
# sql
sql = 'update t_user set name =%s,pwd=%s,birthday=%s where id=%s'
# params
id = input(' :')
name = input(' :')
pwd = input(' :')
birthday = time.strptime(input(' :'), '%Y %m %d ')
params = [name, pwd, birthday,id]
#
count = helper.update(sql, params)
#
if count:
print(' .')
else: # None,False,0
print(' .')
4.簡単なログインと登録
プロジェクトをするときにログインや登録を試みるときにパスワードを暗号化して保存し、sql文と組み合わせて簡単なインタラクションを行う必要があります.
注意:
create table userinfos(
id int primary key auto_increment,
uname varchar(20),
upwd char(40),
isdelete bit default 0
);
/*
ret = doPwd('123')
print(ret)
:40bd001563085fc35165329ea1ff5c5ecbdbbeef
*/
-- , 123, 123, sha1
insert into userinfos
values(1,'123','40bd001563085fc35165329ea1ff5c5ecbdbbeef',0);
ログインと登録
import hashlib
from mysqlHelper import MysqlHelper
def login():
''' '''
name = input(' :')
pwd = input(' :')
#
pwd = doPwd(pwd)
helper = MysqlHelper('127.0.0.1', 'root', '123456', 'python01')
helper.connect()
sql = 'select * from t_user where name=%s and pwd=%s'
params = [name, pwd]
data = helper.fetchone(sql, params)
if data:
print(' .')
else: # None,False,0
print(' .')
def doPwd(pwd):
'''sha1 '''
mysha1 = hashlib.sha1()
mysha1.update(pwd.encode('utf-8'))
pwd = mysha1.hexdigest()
return pwd
def register():
''' '''
name = input(' :')
pwd = input(' :')
#
pwd = doPwd(pwd)
helper = MysqlHelper('127.0.0.1', 'root', '123456', 'python01')
helper.connect()
sql = 'insert into t_user(name,pwd) values(%s,%s)'
params = [name, pwd]
count = helper.insert(sql, params)
if count:
print(' .')
else: # None,False,0
print(' .')
if __name__ == '__main__':
#register()
login()
実際のプロジェクトのログイン登録には様々な検証が加わることが多いが、ここのコードは簡単なログイン登録であり、コミュニケーションを学ぶためだけである.