python - 从mysql到reportlab的多个值
问题描述
我有一个问题,我无法在 mysql 表中显示我的第二条记录。该报告仅连续显示 1 条记录,而第二条记录未显示在 pdf 文件中。我在 python 2.7 上使用 reportlab 生成报告
这是我的代码,我还不能修复:
def nilaisql():
rpt = raw_input("input NPM : ")
sql = "select nama, tanggal, jamMasuk from t_"+rpt
curs.execute(sql)
result = curs.fetchall()
for row in result:
c = canvas.Canvas("Sampelone.pdf")
c.drawString(250, 700, str(row[0]))
c.save()
os.system("Sampelone.pdf")
这是我在mysql上的记录。我想显示第二行记录,但 pdf 只显示第一行记录
我被困在这里,如果你知道一些事情,我真的很感激你可以在这里分享解决方案
解决方案
for row in result:
c = canvas.Canvas("Sampelone.pdf")
c.drawString(250, 700, str(row[0]))
c.save()
您的代码片段正在做的是,创建一个新文件并将变量的内容写入row
pdf 文件并c.save
保存。在下一次迭代中,这个相同的文件被重新创建,它是空白的,原始文件被这个空白文件覆盖,并且row
打印的内容这就是为什么你总是会在其中看到第一行记录的原因。
这应该可以正常工作。根据您的使用和文档高度增加或减少 y 的值。
c = canvas.Canvas("Sampelone.pdf") #creates a pdf
for row in result:
c.drawString(250, y, str(row[0])) #writes data at given co-ordinates
c.save() #saves the pdf
这样您就可以看到 pdf 中的所有行记录。
但是这种做法并不被认为是好的,你应该总是把你的数据放在这样的流动中。.
from reportlab.lib import styles
from reportlab.platypus import SimpleDocTemplate, Paragraph
def nilaisql():
pdfname = 'mydoc.pdf'
doc = SimpleDocTemplate(
pdfname
)
style = styles["Normal"]
story = []
rpt = raw_input("input NPM : ")
sql = "select nama, tanggal, jamMasuk from t_" + rpt
curs.execute(sql)
result = curs.fetchall()
for row in result:
story.append(Paragraph(row, style))
doc.build(
story
)
os.system("Sampelone.pdf")
在reportlab-userguide中阅读有关flowables 的更多信息
推荐阅读
- javascript - SVG Path 'D' 属性半圆进度
- java - 用其他东西替换 eval
- r - 如何生成一个向量 10000 次并且每次存储一个特定的位置?
- node.js - 运行 Heroku 部署的 Twitter 机器人仍然显示应用程序错误?
- assembly - 为什么使用堆栈帧操作时 ebx、esi 和 edi 不可用?
- ruby-on-rails - 如何在 Ruby on Rails 中正确显示 json 记录
- matlab - matlab评估当前行(光标所在的位置)
- c - 有没有办法创建性别评估
- c# - FileSystemWatcher:忽略对文件的第一次更改
- ios - 当用户滚动条形图时,我可以调用 SwiftCharts 中的委托吗?