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マルチスレッド操作クラスです.
 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