<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6_thread_42837"  />
<title>rulinux.net - Форум - Development - Dr.Uid - а почему у меня строки без коммита сохраняются?</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development - Dr.Uid - а почему у меня строки без коммита сохраняются?</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:Dr.Uid - а почему у меня строки без коммита сохраняются?</title>
<link>https://rulinux.net/message.php?newsid=42837&amp;page=1#219617</link>
<guid>https://rulinux.net/message.php?newsid=42837&amp;page=1#219617</guid>
<pubDate>Sat, 25 Feb 2017 17:46:56 +0300</pubDate>
<description><![CDATA[<p>Ну так ты бы сразу сказал, что у тебя петун. У него в доке же честно написано, что с транзакциями он делает <a href="https://docs.python.org/2/library/sqlite3.html#sqlite3-controlling-transactions">что-то странное</a>, и если you want autocommit mode, то надо set isolation_level to None.</p>]]></description>
</item>
<item>
<title>Re:Dr.Uid - а почему у меня строки без коммита сохраняются?</title>
<link>https://rulinux.net/message.php?newsid=42837&amp;page=1#219616</link>
<guid>https://rulinux.net/message.php?newsid=42837&amp;page=1#219616</guid>
<pubDate>Sat, 25 Feb 2017 16:00:02 +0300</pubDate>
<description><![CDATA[<p><fieldset><legend>python</legend><div class="highlight python"><br />
connect = sqlite3.<span class="me1">connect</span><span class="br0">&#40;</span><span class="st0">&quot;/databasepath/name.db&quot;</span><span class="br0">&#41;</span><br />
db = connect.<span class="me1">cursor</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <br />
db.<span class="me1">execute</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;&quot;INSERT INTO log (param1, param2, param3)<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; VALUES (NULL,?,?)&quot;&quot;&quot;</span>, query_parma<span class="br0">&#41;</span><br />
<span class="co1">#db.commit()</span><br />
db.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp;</div></fieldset><br><br> Вот это у меня без коммита  не работало  </p>]]></description>
</item>
<item>
<title>Dr.Uid - а почему у меня строки без коммита сохраняются?</title>
<link>https://rulinux.net/message.php?newsid=42837&amp;page=1#219615</link>
<guid>https://rulinux.net/message.php?newsid=42837&amp;page=1#219615</guid>
<pubDate>Sat, 25 Feb 2017 15:47:40 +0300</pubDate>
<description><![CDATA[<p>Делаю тестовую базу:
<br>
<fieldset><legend>sql</legend><div class="highlight sql"><br />
sqlite3 test1<span class="sy0">.</span>sqlite <span class="sy0">&lt;&lt;</span>EOF<br />
&nbsp; <span class="kw1">CREATE</span> <span class="kw1">TABLE</span> table1<span class="br0">&#40;</span><span class="kw1">KEY</span> varchar<span class="br0">&#40;</span>8<span class="br0">&#41;</span><span class="sy0">,</span> val integer<span class="br0">&#41;</span>;<br />
&nbsp; <span class="kw1">INSERT</span> <span class="kw1">INTO</span> table1 <span class="kw1">VALUES</span><span class="br0">&#40;</span><span class="st0">'counter'</span><span class="sy0">,</span>0<span class="br0">&#41;</span>;<br />
<span class="sy0">.</span>quit<br />
EOF<br />
&nbsp;</div></fieldset>
<br><br>

Вот такой хелловорлд, который апдейтит строку, вставляет ещё одну и просто выходит:
<br>
<fieldset><legend>c</legend><div class="highlight c"><br />
<span class="coMULTI">/*<br />
&nbsp;* &nbsp;Test utility incrementing field in the table<br />
&nbsp;* &nbsp;Compilation string:<br />
&nbsp;* &nbsp; &nbsp;gcc -o test1 test1.c -lsqlite3<br />
&nbsp;* <br />
&nbsp;* &nbsp;SQLite API: http://www.sqlite.org/c3ref/intro.html<br />
&nbsp;* &nbsp; Res.codes: http://www.sqlite.org/rescode.html<br />
&nbsp;* <br />
&nbsp;*/</span><br />
<span class="co2">#include &lt;sqlite3.h&gt;</span><br />
<span class="co2">#include &lt;unistd.h&gt;</span><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<br />
<br />
<span class="kw4">void</span> fuckup<span class="br0">&#40;</span>sqlite3 <span class="sy0">*</span>dbp<span class="sy0">,</span> <span class="kw4">char</span> <span class="sy0">*</span> sqliteErrorStr<span class="sy0">,</span> <span class="kw4">const</span> <span class="kw4">char</span> <span class="sy0">*</span> custonMsg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>NULL <span class="sy0">!=</span> sqliteErrorStr<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;sqlite error: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqliteErrorStr<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlite3_free<span class="br0">&#40;</span>sqliteErrorStr<span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>NULL <span class="sy0">!=</span> custonMsg<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;%s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> custonMsg<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Lib version: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqlite3_libversion<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; sqlite3_close<span class="br0">&#40;</span>dbp<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _exit<span class="br0">&#40;</span>1<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
<br />
<span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; sqlite3 <span class="sy0">*</span>db<span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw4">int</span> rc <span class="sy0">=</span> sqlite3_open<span class="br0">&#40;</span><span class="st0">&quot;./test1.sqlite&quot;</span><span class="sy0">,</span> <span class="sy0">&amp;</span>db<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Факап нах: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqlite3_errmsg<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Lib version: %s<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> sqlite3_libversion<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; sqlite3_close<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw4">char</span> <span class="sy0">*</span>err_msg <span class="sy0">=</span> NULL<span class="sy0">;</span><br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_exec<span class="br0">&#40;</span>db<span class="sy0">,</span> <span class="st0">&quot;update table1 set val=val+1 where key='counter'&quot;</span><span class="sy0">,</span> 0<span class="sy0">,</span> 0<span class="sy0">,</span> <span class="sy0">&amp;</span>err_msg<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> err_msg<span class="sy0">,</span> <span class="st0">&quot; &nbsp;# error is in update table1&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/* ===============================================================<br />
&nbsp; &nbsp; &nbsp;* &nbsp; Below insert is done in addendum to updating string above<br />
&nbsp; &nbsp; &nbsp;* &nbsp; this part can be removed since it does not add up anything<br />
&nbsp; &nbsp; &nbsp;* ===============================================================<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
<br />
&nbsp; &nbsp; sqlite3_stmt <span class="sy0">*</span>res<span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_prepare_v2<span class="br0">&#40;</span>db<span class="sy0">,</span> <span class="st0">&quot;insert into table1 values('PID', :pid)&quot;</span><span class="sy0">,</span> <span class="sy0">-</span>1<span class="sy0">,</span> <span class="sy0">&amp;</span>res<span class="sy0">,</span> NULL<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Error in sqlite3_prepare_v2: %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> rc<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> NULL<span class="sy0">,</span> sqlite3_errmsg<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span class="kw4">int</span> idx<span class="sy0">=</span>sqlite3_bind_parameter_index<span class="br0">&#40;</span>res<span class="sy0">,</span><span class="st0">&quot;:pid&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">0</span> <span class="sy0">&gt;=</span> idx <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;sqlite3_bind_parameter_index: %d<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> idx<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> NULL<span class="sy0">,</span> sqlite3_errmsg<span class="br0">&#40;</span>db<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_bind_int<span class="br0">&#40;</span>res<span class="sy0">,</span> idx<span class="sy0">,</span> getpid<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> err_msg<span class="sy0">,</span> <span class="st0">&quot; &nbsp;# error is in sqlite3_bind_int&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; rc <span class="sy0">=</span> sqlite3_step<span class="br0">&#40;</span>res<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_DONE <span class="sy0">==</span> rc<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;OK, done!<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_ROW <span class="sy0">==</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;sqlite3_step ROW: %s | %s <span class="es1">\n</span>&quot;</span><span class="sy0">,</span> \<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlite3_column_text<span class="br0">&#40;</span>res<span class="sy0">,</span> 0<span class="br0">&#41;</span><span class="sy0">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sqlite3_column_text<span class="br0">&#40;</span>res<span class="sy0">,</span> 1<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>SQLITE_OK <span class="sy0">!=</span> rc <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fprintf<span class="br0">&#40;</span>stderr<span class="sy0">,</span> <span class="st0">&quot;Errror %d in sqlite3_step: <span class="es1">\n</span>&quot;</span><span class="sy0">,</span> rc<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; fuckup<span class="br0">&#40;</span>db<span class="sy0">,</span> NULL<span class="sy0">,</span> sqlite3_errstr<span class="br0">&#40;</span>rc<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <br />
<br />
&nbsp; &nbsp; <span class="coMULTI">/* ==========================================<br />
&nbsp; &nbsp; &nbsp;* &nbsp; Just EXIT, no commit executed<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* &nbsp; Intentionally not calling functions below: <br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* &nbsp; &nbsp; sqlite3_finalize(res)<br />
&nbsp; &nbsp; &nbsp;* &nbsp; &nbsp; sqlite3_close(db)<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* ==========================================<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div></fieldset>

<br><br>
Результат такой:
<br>
<fieldset><legend>bash</legend><div class="highlight bash"><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># rm test1.sqlite</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># sqlite3 test1.sqlite &lt;&lt;EOF</span><br />
<span class="sy0">&gt;</span> &nbsp; create table table1<span class="br0">&#40;</span>key varchar<span class="br0">&#40;</span>8<span class="br0">&#41;</span>, val integer<span class="br0">&#41;</span>;<br />
<span class="sy0">&gt;</span> &nbsp; insert into table1 values<span class="br0">&#40;</span><span class="st_h">'counter'</span>,0<span class="br0">&#41;</span>;<br />
<span class="sy0">&gt;</span> .quit<br />
<span class="sy0">&gt;</span> EOF<br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># sqlite3 test1.sqlite &lt;&lt;EOF</span><br />
<span class="sy0">&gt;</span> &nbsp; <span class="kw1">select</span> <span class="sy0">*</span> from table1;<br />
<span class="sy0">&gt;</span> .exit<br />
<span class="sy0">&gt;</span> EOF<br />
counter<span class="sy0">|</span><span class="nu0">0</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># gcc -o test1 test1.c -lsqlite3 -Wall</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># ./test1 </span><br />
OK, <span class="kw1">done</span><span class="sy0">!</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># ./test1 </span><br />
OK, <span class="kw1">done</span><span class="sy0">!</span><br />
<span class="br0">&#91;</span>president<span class="sy0">@</span>whitehouse<span class="br0">&#93;</span><span class="co0"># sqlite3 test1.sqlite &lt;&lt;EOF</span><br />
&nbsp; <span class="kw1">select</span> <span class="sy0">*</span> from table1;<br />
.exit<br />
EOF<br />
counter<span class="sy0">|</span>2<br />
PID<span class="sy0">|</span>29343<br />
PID<span class="sy0">|</span><span class="nu0">29390</span><br />
<br />
&nbsp;</div></fieldset>
<br><br>
т.е. всё сохраняется. Что я делаю не так?</p>]]></description>
</item>
</channel>
</rss>