一个通用的csv到sql db缓存实用程序。

sparc.apps.cache的Python项目详细描述


#简介

SQL数据库缓存实用程序的一般信息。

映射机制。有关示例,请参见下面的
*要求*部分。

csv信息缓存更新脚本。这将把csv数据导入
数据库。如果数据库已填充,则只导入新条目和
更新。有关
详细使用信息,请参考PYPI软件包文档。

**位置参数:**


<;表>;
<;tr>;
<;td>;<;强>;源<;强>;<;td>;
<;td>;<;td>;
<;td>;
有效的CSV源。这应该是csv文件的路径,或包含csv文件的目录
。csv数据源,如果找到匹配的已注册sparc.cache.interfaces.icacheditmmapper interface
,则会将更新导入到由db-url
<;td>;
<;tr>;
<;tr>;
<;td>;<;td>;<;td>;
<;td>;
用于连接的有效数据库URL(有关详细的URL规范,请参见http://docs.sqlalchemy.org/en/rel砦u 7/core/engines.html)。简写定义是
dialect+driver://user:password@host/dbname[?
<;lt;td>;
<;
<;lt;tr>;
<;lt;table>;


>

<;table>;
<;lt;tr>;
<;lt>;
><;lt>;<;strong>;--模块模块<;lt;strong>;<;lt;lt;lt;strong>;
>;
>;
>;
>;
>;
<;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt;lt模块到从导入基于python的配置。有关如何创建和注册所需组件的信息,请参见
detailed package documentation(readme.md)。这应该是完整的
package.module名称。
<;td>;
<;tr>;
<;tr>;
<;td>;<;td>;
<;td>;
<;td>;
python package,用于配置处理。包中应该有一个有效的
configure.zcml文件,用于配置所需的
缓存工厂和映射订阅服务器。此选项可以发出
多次。
<;td>;
<;tr>;
<;table>;

**示例调用**

>示例假设您创建了包含下面引用的
*mymodule*python模块的*mypackage*python包。

cache mycsvfile.csv信息基于
mypackage.mymodule架构缓存到sqlite数据库中。

$~ cache--module mypackage.mymodule mycsvfile.csv sqlite:///tmp/cache.db


数据类型分配(即文本对日期对整数对…。

d sql数据类型

需求

此应用程序既可以用作已安装的python包(即
pip install…),也可以用作平台特定的独立二进制文件
*cache*。但就其本身而言,应用程序不会做任何有用的事情。
*您*必须创建一些特定于实现的python代码来扩展此应用程序以执行适当的数据缓存。


所有行中)。y
您需要提供此项,唯一目的是确定哪个csv字段
被视为主键。在以下示例中,"id"字段是主键。


mypackage.mymodule
>;>;来自zope.component.factory import factory
>;>;来自sparc.cache.item import cachable itemmixin
>;>;类myitem(cachable itemmixin):
>;>;def\uu init(self,attributes=none):super(myitem,self)
任何csv字段的*id*项都包含主键。

有关高级用法,请参考sparc.cache.interfaces.icachableetem
接口定义和sparc.cache文档,了解如何为icachableetem项创建工厂。

python要求:缓存项工厂
此组件将提供用于
在SQL数据库中创建和存储等效CSV项的SQL架构信息。大多数用例都可以利用预先烘焙的mixin类cachedITemmixin将代码最小化到特定于当前实现的行。


mypackage.mymodule
>;>;来自sparc.cache.item import cachedITemmixin
>;>;来自sparc.db import base
>;>>从sparc.db.sql导入sparcbasemixin
>;>>类mycacheditem(cacheditemmixin,sparcbasemixin,base):
>;>u key='id'
>;>id=sqlalchemy.column(sqlalchemy.varchar(),primary\'key=true)
>;>time=sqalchemy.column(sqlalchemy.datetime(),nullable=true)
>;>user_ip=sqlalchemy.column(sqlalchemy.varchar(),nullable=true)
>;>username=sqlalchemy.column(sqlalchemy.varchar(),nullable=true)
>;>mycacheditem factory=factory(mycacheditem,'mycacheditemfactory')

以上代码应该适用于大多数情况,在这些情况下,*u键*标识哪些
属性应该被视为db表中的主键,而其他
属性表示db表列架构。

.cache.interfaces.icacheditem
接口、sparc.cache文档和sparc.cache.sql。

\python要求:将csv字段映射到sql列
此组件将csv字段名映射到sql列名。再次,我们将使用
mixin类来确保我们的自定义代码需求是最小的。对于大多数
部分,我们将提供一个python字典,它的键引用csv字段
名称和值引用关联的sql列名。

注意下面的*normalizedDateTime()*引用。这是一个类
,它实现了imanagedcacheditemmappertributekeywrapper(请参见
sparc.cache.interfaces),允许在sql
存储之前进行基于python的数据映射。allow这是一个高级主题,它可以在csv数据结构不好的许多情况下使用(例如,
日期字符串可以采用多种不同格式的日期)。

mypackage.mymodule
>;>sparc.cache.sql导入sqlobjectmappermixin
>;>sparc.cache.sources.normalized\datetime导入normalizedatetime
>;>class myitemcachemapper(sqlobjectmappermixin):
>;>mapper={
>;>;'id':'id',
>;>;'time':normalizedDateTime('time'),
>;>;'user-ip':'user-ip',
>;'username':'username'
>;}

###python需求:组件注册允许缓存应用程序查找并利用上面创建的自定义组件。我们需要为icachableitem和icacheditem注册我们的
2个工厂,并且还需要为
icacheditemmapper实现注册订户。


mypackage.mymodule
>;>来自zope.component import getglobalsitemanager
>;>来自zope.component.interfaces从SPARC导入iFactory
>;>;缓存导入iCacheditemmapper,iCachableSource
>;>;gsm=getGlobalsitemanager()
>;>;gsm.registerUtility(mypackage.mymodule.myCachableitemFactory,iFactory,u'mypackage.mymodule.myCachableitemFactory')
>;>;gt;gsm.registerUtility(mypackage.mymodule.mycacheditemfactory,ifactory,u'mypackage.mymodule.mycacheditemfactory')
>;gt;gsm.registerSubscriptionAdapter(myitemCacheMapper,(icachablesource,ifactory),icacheditemmapper)

com中的组件也可以通过zcml注册使用--package
launch参数进行二进制处理。在这种情况下,您需要有一个格式正确的
configure.zcml文件,该文件定义了上述组件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java连接在一个屏幕上成功下载,在第二个屏幕上用几乎相同的代码获得错误   java调用super。超级的方法,跳过超级。方法   使用Web服务连接到sharepoint 2013的Java应用程序   java我无法正确呈现editText   httpurlconnection如何在java中检查url连接状态   java Spring Security可以为同一用户接受多个密码吗?   java如何在PreparedStatement中使用自动生成的@Id?   java每个数组表示一个位模式   java我不确定如何记录鼠标在某个区域被点击的次数   spring如何解决:java。lang.NoSuchMethodError:javax。坚持不懈实体管理器。createStoredProcedureQuery(Ljava/lang/String;)   java如何为blackberry中listfield项内的不同字段触发事件   安卓使用Proguard混淆java代码   java在grails 2中与多个数据源有一个和一个域关联。十、   java在尝试在单击按钮时返回combobox值时一直出错   java我可以在setter中使用@Resource注释而不是字段吗?   java Eclipse调试步进不工作   java比较相同对象的两个表并选择不同的表