我有一个大约30000行数据的文件,我想加载到sqlite3数据库.有没有比为每行数据生成插入语句更快的方法?
数据以空格分隔,并直接映射到sqlite3表.是否有任何类型的批量插入方法用于向数据库添加卷数据?
如果它没有内置,有没有人设计出一些狡猾的好方法呢?
我应该先问一下,有没有一种C++方法可以从API中做到这一点?
有没有人有在LAN(Windows或Linux)上的SMB共享上运行Sqlite数据库的实际经验?
从文档中可以清楚地看出,这并不是共享Sqlite数据库的最快方式.
显而易见的警告是它可能很慢,并且Sqlite一次只支持一个写入DB的线程.因此,您的并发性会降低很多,因为您的数据库更新现在会阻止数据库更长时间(数据在网络上传输时数据库将被锁定).
对于我的应用程序,我想要共享的数据量相当小,并且写入不太频繁(最多每隔几秒写一次).
我应该注意什么?这可以吗?
我知道这不是Sqlite的设计目标,我对基于Postgres/MySql/Sql Server的解决方案不太感兴趣,因为我试图尽可能保持我的应用程序尽可能少的依赖.
相关链接:
从sqlite邮件列表中,我想一个很大的问题是SMB(windows或linux)上的filelock apis有多不可靠
令人讨厌的是Python的sqlite3模块总是返回一个元组列表!当我查询单个列时,我宁愿得到一个简单的列表.
例如,当我执行
SELECT somecol FROM sometable
Run Code Online (Sandbox Code Playgroud)
并打电话
cursor.fetchall()
Run Code Online (Sandbox Code Playgroud)
它返回
[(u'one',), (u'two',), (u'three',)]
Run Code Online (Sandbox Code Playgroud)
但我宁愿得到
[u'one', u'two', u'three']
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我有以下结构:(抱歉尴尬的名字,这是因为它是我的iPhone应用程序的sqlite数据库尚未发布)
CREATE TABLE klb_log (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
log_comment varchar(512)
)
CREATE TABLE klb_log_food_maps (
uid integer,
did integer,
PRIMARY KEY (uid,did),
FOREIGN KEY (uid) references klb_log(id) ON DELETE CASCADE,
FOREIGN KEY (did) references klb_food(id) ON DELETE CASCADE
)
CREATE TABLE klb_food (
id integer,
description varchar(255),
PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
klb_log_food_maps当我删除行时,是否有理由不删除行klb_log?
我遵循http://www.sqlite.org/foreignkeys.html上的SQLite文档中的说明,但是我添加外键的尝试失败了.这是我的创建语句:
CREATE TABLE
checklist (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
checklist_title TEXT,
description TEXT,
created_on INTEGER,
modified_on INTEGER
);
CREATE TABLE
item (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
FOREIGN KEY(checklist_id) REFERENCES checklist(_id),
item_text TEXT, item_hint TEXT,
item_order INTEGER,
created_on INTEGER,
modified_on INTEGER
);
Run Code Online (Sandbox Code Playgroud)
第一张表很好.错误发生在第二个语句中.我已经尝试将两个查询包装在一个事务中而没有.这是错误:
未知栏 "checklist_id" 外键的定义(代码1):在编译:CREATE TABLE项目(_id INTEGER PRIMARY KEY AUTOINCREMENT,外键(checklist_id)参考清单(_id),ITEM_TEXT TEXT,item_hint TEXT,item_order INTEGER,created_on INTEGER ,modified_on INTEGER)
有没有一种简单的方法可以将现有的表结构复制到新的表结构?(不需要数据,只需要结构 - >像id INTEGER,name varchar(20)......)
谢谢
使用NuGet的EF6和SQLite的最新版本.我终于得到app.config文件在Stackoverflow上的一些有用的帖子后工作.现在问题是虽然数据库是,但是没有创建表.
我的app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider"
invariant="System.Data.SQLite"
description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)"
invariant="System.Data.SQLite.EF6"
description=".Net Framework Data Provider for SQLite (Entity …Run Code Online (Sandbox Code Playgroud) .net sqlite system.data.sqlite ef-code-first entity-framework-6
我的SQLite版本不支持IF EXISTS运营商.如何在没有错误的情况下丢弃可能存在或可能不存在的表格?
我现在无法在实时应用程序上更新版本,因此我无法使用支持的SQLite版本IF EXISTS.
我正在查看System.Data.SQLite下载页面,它列出了.NET 4的混合模式程序集和常规(我假设).我将要使用这个库的项目是.NET 4,它将被编译为x86.
我有两个问题:
SQLAlchemy的Query.distinct方法行为不一致:
>>> [tag.name for tag in session.query(Tag).all()]
[u'Male', u'Male', u'Ninja', u'Pirate']
>>> session.query(Tag).distinct(Tag.name).count()
4
>>> session.query(Tag.name).distinct().count()
3
Run Code Online (Sandbox Code Playgroud)
所以第二种形式给出了正确的结果,但第一种形式却没有.这似乎发生在SQLite中,但不适用于Postgres.我有一个函数,它传递一个查询对象来distinct应用一个子句,所以重写所有内容非常困难,最好使用上面的第二种方法.有什么明显的东西让我失踪吗?
sqlite ×10
sql ×4
database ×2
python ×2
.net ×1
.net-4.0 ×1
android ×1
assemblies ×1
bulk ×1
c++ ×1
copy ×1
create-table ×1
insert ×1
sqlalchemy ×1