我有以下查询:
SELECT
dashboard_data.headline,
dashboard_data.message,
dashboard_messages.image_id
FROM dashboard_data
INNER JOIN dashboard_messages
ON dashboard_message_id = dashboard_messages.id
Run Code Online (Sandbox Code Playgroud)
所以我正在使用INNER JOIN并抓住了image_id.所以现在,我想把image_id images.filename从图像表中转换成.
如何将其添加到我的查询中?
我有一个大小< N的列表,我想用一个值填充大小为N.
当然,我可以使用类似下面的东西,但我觉得应该有一些我错过的东西:
>>> N = 5
>>> a = [1]
>>> map(lambda x, y: y if x is None else x, a, ['']*N)
[1, '', '', '', '']
Run Code Online (Sandbox Code Playgroud) 基本上,我想做的是:
>>> from functools import partial
>>> partial(str.startswith, prefix='a')('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: startswith() takes no keyword arguments
Run Code Online (Sandbox Code Playgroud)
但更普遍的问题是,如何用特定的位置参数填充partial.
PS我确实意识到我可以用一个lambda代替.
要在python中按空格分割字符串,通常使用split不带参数的字符串方法:
>>> 'a\tb c\nd'.split()
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
但是昨天我遇到了一个在单词之间使用ZERO WIDTH SPACE的字符串.将我的新知识转化为短暂的黑魔法表演(在JavaScript人员中),我想问一下如何更好地分割所有空白字符,因为这split还不够:
>>> u'a\u200bc d'.split()
[u'a\u200bc', u'd']
Run Code Online (Sandbox Code Playgroud)
UPD1
似乎sthgererally 建议的解决方案,但取决于一些操作系统设置或Python编译选项.很高兴知道确定的原因(如果可以在Windows中打开设置).
UPD2
cptphil发现了一个很好的链接,使一切都清晰:
所以我就此问题联系了Unicode技术委员会,并收到了回复后立即收到回复.他们指出,ZWSP曾经被认为是白色空间,但在Unicode 4.0.1中有所改变
来自unicode网站的报价:
将U + 200B零宽度空间从Zs改为Cf(2003.10.27)
使用U + 200B零宽度空间(ZWSP)时一直存在问题.该字符的功能是允许在通常不允许的位置处换行,因此在功能上是一般格式为Cf的格式字符.Unicode标准中详细记录了此行为,并且Unicode字符数据库中的字符不被视为空白字符.但是,由于历史原因,一般类别仍然是Zs(空间分隔符),这会导致角色被滥用.ZWSP也是唯一不是空白的Zs角色.一般类别可能导致对规则D13基本字符的误解,因为允许ZWSP作为组合标记的基础.
该提议是将U + 200B的一般类别从Zs改为Cf.
决议:已结束.在Unicode版本4.0.1中,U + 200B的常规类别将从Zs更改为Cf.
然后,这一变化反映在Python中.u'\u200B'.isspace()Python 2.5.4和2.6.5 的结果是True,在Python 2.7.1中已经存在False.
对于其他空间字符,常规split就足够了:
>>> u'a\u200Ac'.split()
[u'a', u'c']
Run Code Online (Sandbox Code Playgroud)
如果这还不够,请按照Gabi Purcaru下面的建议逐个添加字符.
描述:
我的陈述应该用'no name'替换每个空的 title_column ,但它不会:
SELECT
COALESCE(main_table.title_column, 'no name') AS title
FROM main_table;
Run Code Online (Sandbox Code Playgroud)
IFNULL()的行为方式相同.
我究竟做错了什么 ?
假设,我有一个修改声明:
cursor = conn.cursor()
# some code
affected_rows1 = cursor.execute(update_statement1, params1)
# some code
conn.commit()
cursor.close()
Run Code Online (Sandbox Code Playgroud)
我是否应该使用a包装代码块try ... except并在引发异常时显式回滚事务,以及应该捕获哪些MySQLdb异常?StandardError在这种情况下我常常捕获任何内容,但现在我犹豫不决,代码块甚至需要显式回滚.
以下示例稍微困难一点,我知道如果第一个更新语句成功,它确实需要显式回滚.在这种情况下,我应该抓住哪些例外:
cursor = conn.cursor()
# some code
affected_rows1 = cursor.execute(update_statement1, params1)
# some code
affected_rows2 = cursor.execute(update_statement2, params2)
#some code
conn.commit()
cursor.close()
Run Code Online (Sandbox Code Playgroud) 我想收集一些关于将Web应用程序部署到正在运行的Tomcat的最佳实践.不久前,我不得不描述我们的网络应用程序的部署过程,这个过程显得比较混乱.
比如,我们在WAR文件(foo.war)中有一个应用程序正确配置,不需要额外的配置.在这种情况下,部署过程相当简单:
要取消部署应用程序:
现在我想在我正在运行的应用程序中覆盖一些上下文参数.阅读完文档后,我需要做的就是:
不幸的是,这不起作用:应用程序不会重新启动.根据经验,我们发现唯一可行的解决方案是将war文件部署到$ CATALINA_HOME/webapps之外的位置.此外,应该在web.xml中指定WAR文件中可配置上下文参数的默认值,因为当外部有context.xml时,不会读取WAR文件中的context.xml.
这是foo.xml的一个简单示例:
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="/path-to-deployment-directory/foo.war">
<Parameter name="myparam" value="newvalue" override="false"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
如果希望'newvalue'覆盖WAR的web.xml中指定的值,请确保为参数指定override = false.这对我们来说并不明显.
因此,要将应用程序部署到正在运行的Tomcat:
要应用新的上下文参数:
要取消部署应用程序:
请注意,删除foo.war也可以,但也会删除foo.xml.
到现在为止,我有以下问题:
使用mysql-python中的游标我曾经称之为"BEGIN;","COMMIT;"和"ROLLBACK;" 明确如下:
try:
cursor.execute("BEGIN;")
# some statements
cursor.execute("COMMIT;")
except:
cursor.execute("ROLLBACK;")
Run Code Online (Sandbox Code Playgroud)
然后,我发现底层连接对象有相应的方法:
try:
cursor.connection.begin()
# some statements
cursor.connection.commit()
except:
cursor.connection.rollback()
Run Code Online (Sandbox Code Playgroud)
检查DB-API PEP我发现它没有提到连接对象的begin()方法,即使对于扩展也是如此.
顺便说一下,当您使用该方法时,Mysql-python会抛出DeprecationWarning.例如,sqlite3.connection根本就没有这个方法.
问题是为什么PEP中没有这样的方法?该语句是否可选,是否足以调用commit()?
特定
带有全局变量的XSLT样式表:
<xsl:variable name="lang" select="/response/str[@name='lang']"/>
Run Code Online (Sandbox Code Playgroud)
题
从何而来,在谓词中使用变量的限制在xsl:template匹配模式中是不正确的,但在xsl:apply-templates选择模式时是否可以接受?
<!-- throws compilation error, at least in libxslt -->
<xsl:template match="list[@name='item_list'][$lang]"/>
<!-- works as expected -->
<xsl:template match="list[@name='item_list'][/response/str[@name='lang']]"/>
<!-- works as expected -->
<xsl:template match="response">
<xsl:apply-templates select="list[@name='item_list'][$lang]">
</xsl:template>
Run Code Online (Sandbox Code Playgroud) 看下面的代码片段:
>>> import unicodedata
>>> from unicodedata import normalize, name
>>> normalize('NFKD', u'\xb4')
u' \u0301'
>>> normalize('NFKD', u'a\xb4a')
u'a \u0301a'
>>> normalize('NFKC', u'a\xb4a')
u'a \u0301a'
>>> name(u'\xb4'), name(u'\u0301')
('ACUTE ACCENT', 'COMBINING ACUTE ACCENT')
Run Code Online (Sandbox Code Playgroud)
我想了解,如果行为翻译u'\xb4'到u' \u0301'是正确的.为什么它将结合的重音与空间相结合?为什么它会翻译你\xb4呢?
在fileformat,我们看到ACUTE ACCENT用于调用SPACING ACUTE.我想,这只是意味着光标应该移动而不是等待输入以下字符.
UPD:如果有人感兴趣,这里有一个列表,如果NFKC规范化后的unicode字符在开头有空格:http://pastebin.com/Z99r5AK9
python ×6
mysql ×3
sql ×3
coalesce ×1
deployment ×1
ifnull ×1
join ×1
list ×1
mysql-python ×1
replace ×1
servlets ×1
tomcat ×1
unicode ×1
whitespace ×1
xslt ×1