我开始注意到我的iPhone应用程序的SQLite查询有一种奇怪的行为.每当我执行"INSERT"语句时,都会在我的db文件旁边创建一个日志文件(确切的文件名是"userdata.db-journal").
如果我正确理解了文档,那么SQLite将使用此日志文件在操作失败时能够回滚.但是操作完成后文件仍保留在那里.
我做了准备,绑定和执行查询的经典步骤(为简单起见,不检查返回值):
sqlite3 *db = NULL;
sqlite3_open( "userdata.db", &db );
sqlite3_stmt *insertStmt = NULL;
const char *query = "INSERT INTO table VALUES(?,?)";
sqlite3_prepare_v2( db, query, -1, &insertStmt, NULL );
sqlite3_bind_int( insertStmt, 1, 0 );
sqlite3_bind_int( insertStmt, 2, 0 );
sqlite3_step( insertStmt );
sqlite3_reset( insertStmt );
sqlite3_clear_bindings( insertStmt );
sqlite3_close( db );
Run Code Online (Sandbox Code Playgroud)
日志文件是在调用'sqlite3_step'函数后创建的,并保持不变直到关闭数据库.我需要做些什么才能让它消失?
我想获得一个给定一组id的ActiveRecord对象数组.
我认为
Object.find([5,2,3])
Run Code Online (Sandbox Code Playgroud)
将返回一个数组,其中包含对象5,对象2,然后按顺序返回对象3,但我得到的数组按对象2,对象3和对象5排序.
ActiveRecord Base 查找方法API提到您不应该按照提供的顺序期望它(其他文档不提供此警告).
一个可能的解决方案是按相同顺序的ID数组查找的?,但订单选项似乎对SQLite无效.
我可以编写一些ruby代码来自己对对象进行排序(有点简单,缩放比例较差或缩放比较复杂),但是有更好的方法吗?
我的SQL知识非常有限,特别是关于SQLite,虽然我相信这将是某种通用查询...或者可能不是因为搜索和替换...
我在SQLite中有这个音乐数据库,当然有各种各样的领域,但重要的是"media_item_id"和"content_url".
这是"content_url"的示例:
file:///c:/users/nazgulled/music/band%20albums/devildriver/%5b2003%5d%20devildriver/08%20-%20what%20does%20it%20take%20(to%20be%20a%20man).mp3
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个搜索类似条目的查询,其中"content_url"遵循该模式,并用其他东西替换它("content_url").
例如,通用的"content_url"可以是这样的:
file:///c:/users/nazgulled/music/band%20albums/BAND_NAME/ALBUM_NAME/SONG_NAME.mp3
Run Code Online (Sandbox Code Playgroud)
我想用以下内容替换所有这些条目:
file:///c:/users/nazgulled/music/bands/studio%20albums/BAND_NAME/ALBUM_NAME/SONG_NAME.mp3
Run Code Online (Sandbox Code Playgroud)
我怎么能在一个查询中做到这一点?
PS:我正在使用Firefox SQLite Manager(找不到更好的免费替代Windows).
我需要将一个复杂的项目从sqlite迁移到PostgreSQL.很多人似乎都有外键,数据截断等问题......
编辑:我尝试了django-command-extensions DumpScript,但它不能在我的2GB RAM PC上使用我当前的DataSet运行.
如何在iphone中运行的应用程序中查看sqlite文件中存在的数据,就像我们使用mysql工作台查看数据库的内容一样
我在我的一个项目中使用SQLite3,我需要确保插入到表中的行对于它们的一些列的组合是唯一的.在大多数情况下,插入的行在这方面会有所不同,但如果匹配,新行必须更新/替换现有行.
显而易见的解决方案是使用复合主键,并使用conflict子句来处理冲突.在此之前:
CREATE TABLE Event (Id INTEGER, Fld0 TEXT, Fld1 INTEGER, Fld2 TEXT, Fld3 TEXT, Fld4 TEXT, Fld5 TEXT, Fld6 TEXT);
Run Code Online (Sandbox Code Playgroud)
成了这个:
CREATE TABLE Event (Id INTEGER, Fld0 TEXT, Fld1 INTEGER, Fld2 TEXT, Fld3 TEXT, Fld4 TEXT, Fld5 TEXT, Fld6 TEXT, PRIMARY KEY (Fld0, Fld2, Fld3) ON CONFLICT REPLACE);
Run Code Online (Sandbox Code Playgroud)
这确实强制执行我需要它的唯一性约束.不幸的是,这种变化也会导致性能损失超出我的预期.我使用sqlite3命令行实用程序进行了一些测试,以确保我的其余代码中没有错误.测试涉及在单个事务中或在每个1,000行的100个事务中输入100,000行.我得到了以下结果:
| 1 * 100,000 | 10 * 10,000 | 100 * 1,000 |
|---------------|---------------|---------------|
| Time | CPU | Time | CPU | Time | CPU …Run Code Online (Sandbox Code Playgroud) 我想显示ListView与Date作为SectionHeader.
我有: 我使用自定义SimpleCursorAdapter从sqlite数据库显示ListView.
我的自定义SimpleCursorAdapter是:
public class DomainAdapter extends SimpleCursorAdapter{
private Cursor dataCursor;
private LayoutInflater mInflater;
public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from,
int[] to) {
super(context, layout, dataCursor, from, to);
this.dataCursor = dataCursor;
mInflater = LayoutInflater.from(context);
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.todo_row, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.label);//Task Title
holder.text2 = (TextView) convertView.findViewById(R.id.label2);//Task Date
holder.img = (ImageView) convertView.findViewById(R.id.task_icon);
convertView.setTag(holder);
} else …Run Code Online (Sandbox Code Playgroud) 我有表SQLite数据库myTable和列id,posX,posY.行数不断变化(可能会增加或减少).如果我知道的值id的每一行,并且行数,我可以执行一个SQL查询来更新所有的posX,并posY根据ID不同值的字段?
例如:
---------------------
myTable:
id posX posY
1 35 565
3 89 224
6 11 456
14 87 475
---------------------
Run Code Online (Sandbox Code Playgroud)
SQL查询伪代码:
UPDATE myTable SET posX[id] = @arrayX[id], posY[id] = @arrayY[id] "
Run Code Online (Sandbox Code Playgroud)
@arrayX并且@arrayY是存储posX和posY字段的新值的数组.
如果,例如,arrayX和arrayY包含以下值:
arrayX = { 20, 30, 40, 50 }
arrayY = { 100, 200, 300, 400 }
Run Code Online (Sandbox Code Playgroud)
...然后查询后的数据库应如下所示:
---------------------
myTable:
id posX posY …Run Code Online (Sandbox Code Playgroud) 我有一个从大熊猫DataFrame中提取的股票市场数据列表(见下面的格式).该日期用作DataFrame中的索引.我想将数据(包括索引)写入SQLite数据库.
AAPL GE
Date
2009-01-02 89.95 14.76
2009-01-05 93.75 14.38
2009-01-06 92.20 14.58
2009-01-07 90.21 13.93
2009-01-08 91.88 13.95
Run Code Online (Sandbox Code Playgroud)
基于我对Pandas的write_frame代码的阅读,它目前不支持编写索引.我尝试使用to_records,但遇到了Numpy 1.6.2和datetimes的问题.现在我正在尝试使用.itertuples编写元组,但SQLite抛出了一个错误,表明数据类型不受支持(参见下面的代码和结果).我对Python,Pandas和Numpy比较陌生,所以我完全有可能错过一些明显的东西.我想我在尝试为SQLite写一个日期时遇到了问题,但我想我可能会过于复杂.
我想我可以通过升级到Numpy 1.7或Pandas的开发版来修复这个问题,Pandas在GitHub上发布了一个修复程序.我更愿意使用软件的发布版本开发 - 我是新手,我不希望稳定性问题进一步混淆.
有没有办法使用Python 2.7.2,Pandas 0.10.0和Numpy 1.6.2来实现这一目标?也许以某种方式清理日期时间?我有点过头了,任何帮助都会受到赞赏.
码:
import numpy as np
import pandas as pd
from pandas import DataFrame, Series
import sqlite3 as db
# download data from yahoo
all_data = {}
for ticker in ['AAPL', 'GE']:
all_data[ticker] = pd.io.data.get_data_yahoo(ticker, '1/1/2009','12/31/2012')
# create a data frame
price = DataFrame({tic: …Run Code Online (Sandbox Code Playgroud) 我想知道如何真空sqlite数据库.我从命令提示符处为整个数据库尝试了语法MANUAL VACUUM命令:
$sqlite3 database_name "VACUUM;";
Run Code Online (Sandbox Code Playgroud)
但它给出的错误是:
near "database_name": syntax error.
Run Code Online (Sandbox Code Playgroud)
还有AUTO VACUUM:
PRAGMA auto_vacuum = INCREMENTAL;
Run Code Online (Sandbox Code Playgroud)
并尝试将其用于特定的表格:
VACUUM table_name;
Run Code Online (Sandbox Code Playgroud)
但没有结果.
sqlite ×10
sql ×3
iphone ×2
activerecord ×1
android ×1
django ×1
find ×1
insert ×1
listview ×1
pandas ×1
performance ×1
postgresql ×1
python ×1
replace ×1
rows ×1
sql-update ×1
vacuum ×1