我对 Python 及其 MySQLdb 连接器有点陌生。我正在编写一个 API 来使用 RESTful 方法从数据库返回一些数据。在 PHP 中,我将连接管理部分封装在一个类中,充当 MySQL 查询的抽象层。
我很早就在脚本中定义了连接: con = mdb.connect('localhost', 'user', 'passwd', 'dbname')
然后,在所有后续方法中:
import MySQLdb as mdb
def insert_func():
with con:
cur = con.cursor(mdb.cursors.DictCursor)
cur.execute("INSERT INTO table (col1, col2, col3) VALUES (%s, %s, %s)", (val1, val2, val3) )
rows = cur.fetchall()
#do something with the results
return someval
Run Code Online (Sandbox Code Playgroud)
等等。
我使用mdb.cursors.DictCursor
是因为我更喜欢能够以关联数组的方式访问数据库列。
在一个函数中,我发出一个插入查询以创建一个具有唯一“groupid”的“组”。
这个“组”有一个创建者。数据库中的每个用户都在表中他/她行的“组”列中保存一个 JSON 数组。
因此,当我创建一个新组时,我想将 groupid 分配给创建它的用户。
我使用类似的功能更新用户的记录。
我已经将“插入”和“更新”部分包装在两个单独的函数定义中。
我第一次运行脚本时,一切正常。
第二次运行脚本时,脚本无休止地运行(我怀疑是由于与 MySQL 数据库的某些空闲连接)。
当我使用 CTRL + …
我刚刚开始学习来自Python的Scala.我在Scala中尝试了一个基本的文件处理任务.任务是"[ ... ]"
使用正则表达式从数据文件中删除子串.该脚本成功处理前几个文件,然后抛出java.lang.OutOfMemoryError: Java heap space
错误.发生错误的数据文件大约是70MB,我有16GB的RAM供我使用.(前面的6个文件的文件大小<100Kb,第一个文件作为例外:5.5MB).
我的问题是:是什么导致了 OutOfMemoryError
,我怎样才能改变我的方法以防止它发生?我不明白为什么会这样.我在调试内存错误方面经验不足,因为Python在内存管理方面相对宽容.
关于编码风格或我使用的方法的任何其他评论都非常受欢迎 - 我渴望学习.
Regexer.scala:
import scala.io.Source
import java.io._
object Regexer {
def main(args: Array[String]): Unit = {
val filenames = Source.fromFile("all_files.txt").getLines()
for (fn <- filenames) {
val datafile:String = Source.fromFile(fn).mkString
val new_data:String = datafile.replaceAll(raw"\[.*?\]", "")
val file = new File(fn)
val bw = new BufferedWriter(new FileWriter(file))
bw.write(new_data)
bw.close()
}
}
}
Run Code Online (Sandbox Code Playgroud)
all_files.txt
是一个文件,包含要处理的所有文件的路径(因为它们位于子目录中).
最后,执行时抛出完整的错误消息:
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:124)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:596) …
Run Code Online (Sandbox Code Playgroud)