小编Ala*_*eid的帖子

相关的SQLite数据类型如INT,INTEGER,SMALLINT和TINYINT有什么区别?

在SQLite3中创建表时,当遇到意味着类似内容的所有可能数据类型时,我会感到困惑,所以有人能告诉我以下数据类型之间的区别吗?

INT, INTEGER, SMALLINT, TINYINT

DEC, DECIMAL

LONGCHAR, LONGVARCHAR

DATETIME, SMALLDATETIME
Run Code Online (Sandbox Code Playgroud)

是否有某些文件列出了最小/最大值.各种数据类型的能力?例如,我猜smallint的最大值大于tinyint,但值小于整数,但我不知道这些容量是什么.

sqlite

99
推荐指数
3
解决办法
9万
查看次数

csv.DictReader中的行数

我有一个csv DictReader对象(使用Python 3.1),但我想知道在迭代它之前阅读器中包含的行数/行数.如下......

myreader = csv.DictReader(open('myFile.csv', newline=''))

totalrows = ?

rowcount = 0
for row in myreader:
    rowcount +=1
    print("Row %d/%d" % (rowcount,totalrows))
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过迭代读取器来获得总数,但是我无法运行'for'循环.我可以遍历阅读器的副本,但我找不到如何复制迭代器.

我也可以用

totalrows = len(open('myFile.csv').readlines())
Run Code Online (Sandbox Code Playgroud)

但这似乎是不必要的重新打开文件.如果可能的话,我宁愿从DictReader获取计数.

任何帮助,将不胜感激.

艾伦

python iterator python-3.x

27
推荐指数
2
解决办法
4万
查看次数

SQLite日期存储和转换

我在使用Python和SQLite进行日期存储/检索时遇到了设计问题.

我知道SQLite日期列将日期存储为ISO格式的文本(即'2010-05-25').因此,当我显示英国日期(例如,在网页上)时,我使用转换日期

datetime.datetime.strptime(mydate,'%Y-%m-%d').strftime('%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)

然而,当谈到将数据写回到表中时,SQLite非常宽容并且非常乐意存储'25/06/2003'在日期字段中,但这并不理想,因为

  • 我可以在同一列中留下混合的日期格式,

  • SQLite的日期函数仅适用于ISO格式.

因此,我需要在提交之前将日期字符串转换回ISO格式,但是我需要一个通用函数来检查要在所有日期字段中写入的数据,并在必要时转换为ISO.这对我来说听起来有点乏味,但也许这是不可避免的.

有更简单的解决方案吗?是否更容易将日期字段更改为10个字符的字段并存储'dd/mm/yyyy'在整个表中?这样在从表中读取或写入时不需要转换,如果我需要执行任何日期算术,我可以使用datetime()函数.

其他开发人员如何克服这个问题?任何帮助,将不胜感激.为了记录,我在Python 3.1中使用SQLite3.

python sqlite

12
推荐指数
2
解决办法
2万
查看次数

如何在命令窗口中关闭闪烁光标?

我有一个Python脚本,使用print()函数将输出发送到DOS命令窗口(我使用的是Windows 7),但我希望防止(或隐藏)光标在下一个可用输出位置闪烁.有谁知道我怎么能这样做?我查看了DOS命令列表,但找不到合适的东西.

任何帮助,将不胜感激.艾伦

python cursor command-window

9
推荐指数
4
解决办法
8606
查看次数

如何在Python中检测ESCape keypress?

我正在命令窗口(Windows 7,Python 3.1)中运行一个进程,我希望用户通过按ESCape键来中止该进程.但是,按下ESCape键似乎没有做任何事情:-(,循环永远不会中断.我也尝试从我的IDE(Wing)中运行脚本,但同样,循环不能被中断.

以下是我的概念验证测试的精简版...

import msvcrt
import time

aborted = False

for time_remaining in range(10,0,-1):
    # First of all, check if ESCape was pressed
    if msvcrt.kbhit() and msvcrt.getch()==chr(27):
        aborted = True
        break

    print(str(time_remaining))       # so I can see loop is working
    time.sleep(1)                    # delay for 1 second
#endfor timing loop

if aborted:
    print("Program was aborted")
else:
    print("Program was not aborted")

time.sleep(5)  # to see result in command window before it disappears!
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我哪里出错了,我将非常感激.

python windows escaping keypress

8
推荐指数
4
解决办法
3万
查看次数

Unittest setUpClass不工作

我正在尝试开始使用unittest,但我在开始setUpClass()工作时遇到了问题.这是我的测试代码......

import unittest

class TestRepGen(unittest.TestCase):
    """ Contains methods for training data testing """

    testvar = None

    @classmethod
    def setUpClass(cls):
        cls.testvar = 6

    def test_method(self):
        """ Ensure data is selected """
        self.assertIsNotNone(self.testvar,"self.testvar is None!")

# run tests
if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

将显示断言错误消息,指示self.testvar == None并且尚未更改setUpClass().我的代码有问题吗?

如果我从IDE(Wing)中运行代码,或者直接从命令行运行代码,我会得到相同的结果.为了记录,我在Windows7下使用Python 3.2.1.

python unit-testing python-3.x

7
推荐指数
3
解决办法
9567
查看次数

二进制文件电子邮件附件问题

使用Python 3.1.2我在发送二进制附件文件(jpeg,pdf等)时遇到问题 - MIMEText附件工作正常.有问题的代码如下......

for file in self.attachments:
   part = MIMEBase('application', "octet-stream")
   part.set_payload(open(file,"rb").read())
   encoders.encode_base64(part)
   part.add_header('Content-Disposition', 'attachment; filename="%s"' % file)
   msg.attach(part)   # msg is an instance of MIMEMultipart()

server = smtplib.SMTP(host, port)
server.login(username, password)
server.sendmail(from_addr, all_recipients, msg.as_string())
Run Code Online (Sandbox Code Playgroud)

但是,在调用堆栈中向下(参见下面的回溯),看起来好像msg.as_string()已经收到一个附件,它创建了'bytes'类型的有效负载而不是字符串.

有谁知道可能导致问题的原因是什么?任何帮助,将不胜感激.

艾伦


builtins.TypeError: string payload expected: <class 'bytes'>
File "c:\Dev\CommonPY\Scripts\email_send.py", line 147, in send
  server.sendmail(self.from_addr, all_recipients, msg.as_string())
File "c:\Program Files\Python31\Lib\email\message.py", line 136, in as_string
  g.flatten(self, unixfrom=unixfrom)
File "c:\Program Files\Python31\Lib\email\generator.py", line 76, in flatten
  self._write(msg)
File "c:\Program Files\Python31\Lib\email\generator.py", line 101, in _write
  self._dispatch(msg)
File …
Run Code Online (Sandbox Code Playgroud)

python email binary smtp attachment

6
推荐指数
2
解决办法
1万
查看次数

SQLite的小数位问题

我有一个SQLite3表,其列具有格式DECIMAL(7,2),但每当我选择值不具有非零第二小数位(例如.3.00或3.10)的行时,结果始终具有尾随零(s)遗失(例如3或3.1).有没有办法在SELECT语句中应用格式化函数,以便获得所需的2dp?我尝试过ROUND(),但这没有效果.否则,每次执行SELECT语句时,我都必须继续将生成的列值转换为显示所需的格式(在我的情况下使用Python),这真的很痛苦.

我甚至不介意结果是字符串而不是数字,只要它具有正确的小数位数.

任何帮助,将不胜感激.

艾伦

sqlite

5
推荐指数
1
解决办法
5841
查看次数

Python 3托管

我正在寻找托管在Python 3和CherryPy中开发的网站的公司.Webfaction看起来不错,但仅限于Linux服务器,我的网站已经在Windows下进行了设计和测试.任何人都可以总结(或指向我)我必须对我的代码进行的更改,以使其在Linux下运行吗?

我想如果我想保持我的代码不变,我可能不得不去寻找VPS(虚拟专用服务器).我会对我安装的内容有更多的控制权,但它的价格要高得多.有没有人对Python有这种设置的经验?

python hosting cherrypy python-3.x

5
推荐指数
1
解决办法
3644
查看次数

模板与编码HTML

我有一个web应用程序,包含一些html表单,用于维护一些表(SQlite,使用CherryPy来处理Web服务器的东西).首先,我完全采用"Python方式",并通过生成html字符串.代码,具有公共页眉,页脚等,在单独的模块中定义为函数.

我也喜欢模板的想法,所以我尝试了Jinja2,我发现它非常适合开发人员.一开始我认为模板是要走的路,但那是页面很简单的时候.引入.css和.js文件后(不一定与.html文件位于同一文件夹中),并引入了越来越多的{{...}}变量和{%...%}命令,事情在设计时开始变得混乱,尽管它们在运行时看起来很棒.当我需要额外的javascript或部分时,事情变得更加困难.

据我所知,使用模板的主要优点是:在设计过程中,可以在浏览器中轻松查看页面的非动态元素.除了{}占位符之外,html与python代码分开.如果您的公司有网页设计师,他们仍然可以在不知道Python的情况下进行设计.

虽然有些缺点是:{{}}分隔符在设计时在浏览器中查看时可见.相关的.css和.js文件必须在同一文件夹中才能在设计时在浏览器中查看效果.数据,变量,列表等必须在高级中准备,并且要么全局声明,要么作为参数传递给render()函数.

那么 - 什么时候使用'硬编码'HTML,何时使用模板?我不确定最好的方法,所以我很想听听其他开发者的意见.

TIA,艾伦

html python templates

4
推荐指数
2
解决办法
1621
查看次数

Jinja2的多部分模板问题

在创建模板时,我通常有3个独立的部分(标题,正文,页脚),我将它们组合在一起,将一个字符串传递给Web服务器(在本例中为CherryPy).

我的第一种方法如下......

from jinja2 import Environment, FileSystemLoader
env  = Environment(loader=FileSystemLoader(''))

tmpl = env.get_template('Body.html')
page_body = tmpl.render()

tmpl = env.get_template('Header.html')
page_header = tmpl.render()

tmpl = env.get_template('Footer.html')
page_footer = tmpl.render()

page_code = page_header + page_body + page_footer
Run Code Online (Sandbox Code Playgroud)

但这包含重复的代码,所以我的下一个方法是......

def render_template(html_file):
    from jinja2 import Environment, FileSystemLoader
    env  = Environment(loader=FileSystemLoader(''))
    tmpl = env.get_template(html_file)
    return tmpl.render()

page_header = render_template('Header.html')
page_body   = render_template('Body.html')
page_footer = render_template('Footer.html)
Run Code Online (Sandbox Code Playgroud)

但是,这意味着每个部分都是在自己的环境中创建的 - 这可能是个问题吗?这种方法还有其他缺点吗?

我选择了三部分方法而不是子模板方法,因为我认为它可能更灵活(也更容易理解),但我可能错了.有人想说服我使用标题,正文和页脚块可能会更好吗?

任何意见,将不胜感激.艾伦

python templates jinja2

4
推荐指数
1
解决办法
2246
查看次数

替换所有游标行中的值

使用SQLite和Python 3.1,我希望通过HTML表格显示货币数据.接受游标作为参数的模板.因此,所有货币值必须有2个小数位,但SQLite将它们存储为浮点类型(即使结构表示十进制:-(),因此有些必须在显示之前进行转换(例如,我希望12.1显示为12.10).

代码就像这样(简化说明)......

import sqlite3
con = sqlite3.connect("mydb")
con.row_factory = sqlite3.Row

cur = con.cursor()
cur.execute("select order_no, amount from orders where cust_id=123")

for row in cur:
   row['amount'] = format(row['amount'],'%.2f')
Run Code Online (Sandbox Code Playgroud)

最后一个命令抛出错误"#builtins.TypeError:'sqlite3.Row'对象不支持项目分配"

如何解决无法更改行对象值的问题?我可以将光标转换为字典列表(每行一个,例如.[{'order_no':1,'amount':12.1},{'order_no':2,'amount':6.32},... ]),然后格式化每个项目的'金额'值?如果是这样,我该怎么做?

有没有更好的解决方案来实现我的目标?任何帮助,将不胜感激.

TIA,艾伦

python sqlite

4
推荐指数
1
解决办法
2027
查看次数

在SQLite中导航光标行(我们可以回放/重置光标,例如回到第一行吗?)

我试图理解以下内置函数在顺序处理游标行时如何工作.描述来自Python 3.1手册(使用SQLite3)

Cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)

获取查询结果集的下一行,返回单个序列.

Cursor.fetchmany()
Run Code Online (Sandbox Code Playgroud)

获取查询结果的下一组行,返回一个列表.

Cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)

获取查询结果的所有(剩余)行,返回列表.

所以,如果我有一个循环,我使用cursor.fetchone()一次处理一行,而后面的一些代码要求我返回第一行,或者使用fetchall()获取所有行,我该怎么做?

这个概念对我来说有点奇怪,特别是来自Foxpro背景,它具有记录指针的概念,可以移动到光标的第1行或最后一行(go top/bottom),或者转到第n行(去吧)

任何帮助,将不胜感激.

艾伦

python sqlite fetch

3
推荐指数
1
解决办法
6876
查看次数