PythonはMysql関連の問題を頻繁に読み取る
2804 ワード
1、頻繁に大量のデータをselectする必要があり、時間が長く、メモリが消費されるので、mysqlの性能問題をどのように解決しますか?
返される結果の数に要求がない場合は、返される数を制御します.
cursor.fetchmany(size=1000)
これにより、1000個のデータのみが返され、size未満の結果が返されると、すべてのデータが返されます.
1本だけ必要ならもっと簡単です:fetchone()
2、毎回挿入するデータが大きすぎて、MySQL server has gone awayはどのように解決しますか?
blobタイプとして格納される.
修正my.conf里:max_allowed_packet = 500m
3、pythonのリストタイプをmysqlに保存し、次にリスト形式で読み込むにはどうすればいいですか?
リストタイプに半角のカンマが含まれているか、挿入したデータに特殊な記号が含まれているため、mysqlは正常に挿入できません.
Googleにはいろいろな方法がありますが、私はbase 64を取っています.挿入するデータbase 64 encodeはMysqlに正常に格納されます.
base64str = base64.b64encode(str(mysqlstr))
mysqlstr = base64.b64decode(b64str)
注意:読み込むときはbase 64 decodeが必要ですが、strが得られるとlistシーケンスを正常に使用して値を取ることはできません.どうしよう?
eval(string)
以上のように操作すると、evalはこの問題をよく解決し、strをtupleに変えることができ、直接使用することができます.
4、Mysqlを頻繁に操作してデータを削除する場合、myのためにマルチスレッドでデータベースを操作することが望ましい.conf構成の問題がもたらすトラブル.
次はMysqlマルチスレッド操作クラスです.
返される結果の数に要求がない場合は、返される数を制御します.
cursor.fetchmany(size=1000)
これにより、1000個のデータのみが返され、size未満の結果が返されると、すべてのデータが返されます.
1本だけ必要ならもっと簡単です:fetchone()
2、毎回挿入するデータが大きすぎて、MySQL server has gone awayはどのように解決しますか?
blobタイプとして格納される.
修正my.conf里:max_allowed_packet = 500m
3、pythonのリストタイプをmysqlに保存し、次にリスト形式で読み込むにはどうすればいいですか?
リストタイプに半角のカンマが含まれているか、挿入したデータに特殊な記号が含まれているため、mysqlは正常に挿入できません.
Googleにはいろいろな方法がありますが、私はbase 64を取っています.挿入するデータbase 64 encodeはMysqlに正常に格納されます.
base64str = base64.b64encode(str(mysqlstr))
mysqlstr = base64.b64decode(b64str)
注意:読み込むときはbase 64 decodeが必要ですが、strが得られるとlistシーケンスを正常に使用して値を取ることはできません.どうしよう?
eval(string)
以上のように操作すると、evalはこの問題をよく解決し、strをtupleに変えることができ、直接使用することができます.
4、Mysqlを頻繁に操作してデータを削除する場合、myのためにマルチスレッドでデータベースを操作することが望ましい.conf構成の問題がもたらすトラブル.
次はMysqlマルチスレッド操作クラスです.
1 class MYSQL:
2 def __init__(self,sql):
3 self.sql = sql
4 self.conn = MySQLdb.connect(charset='utf8',user='yourname',passwd='passwd',db='your dbname')
5 self.cursor = self.conn.cursor()
6
7 def insert(self):
8 self.cursor.execute(self.sql)
9 self.conn.commit()
10 self.cursor.close()
11 self.conn.close()
12 return True
13
14 def select(self):
15 self.cursor.execute(self.sql)
16 alldata = self.cursor.fetchall()
17 self.cursor.close()
18 self.conn.close()
19 return alldata
20
21 def update(self):
22 self.cursor.execute(self.sql)
23 self.conn.commit()
24 self.cursor.close()
25 self.conn.close()
26 return True