GVKun编程网logo

为什么 Python 的 SQLite3 不会更新

2

本文将分享为什么Python的SQLite3不会更新的详细内容,此外,我们还将为大家带来关于Angular11不会更新UI、dbContext不会更新、findOneAndUpdate不会更新,除非我

本文将分享为什么 Python 的 SQLite3 不会更新的详细内容,此外,我们还将为大家带来关于Angular 11 不会更新 UI、dbContext 不会更新、findOneAndUpdate 不会更新,除非我调用“.then()”为什么?、getter 不会更新 Vuex 中的值的相关知识,希望对你有所帮助。

本文目录一览:

为什么 Python 的 SQLite3 不会更新

为什么 Python 的 SQLite3 不会更新

如何解决为什么 Python 的 SQLite3 不会更新

这很早就奏效了,我的一些行有有效的条目,但很多都没有...

  1. def setLength(vid,seconds):
  2. db_conn.execute("UPDATE Videos SET length= ''" + str(seconds//1) + "'' WHERE ID=''"+str(vid)+"'';")
  3. db_conn.commit()
  4. result = my_cursor.execute("SELECT length,title FROM Videos WHERE ID = " + "''" + str(vid) + "'';")
  5. for row in result:
  6. print(vid,row[0])
  7. print("gets here")

给出输出:

  1. gets here

即使我使用有效 ID 运行它。

编辑:我可以使用相同的 ID 从该行获取标题列,但尝试更新长度列只会使单元格为空。

解决方法

可能非常具体,但没有更新的原因是因为在插入表时,某些 ID 已转换为科学记数法。那些会找到他们的标题,因为我用于标题搜索的功能对此很敏感。我的错。

ID 标题 文件名 长度
1.72986707541665e+ 无题 253c95c4b27116e.mp
263857279641976794 ShowIWanttoWatchEp 视频/ShowIWantto 1144.0
185690842836020994 ShowIWanttoWatchEp 视频/ShowIWantto 1174.0
1.7317732968119e+6 无题 9231941.m4v
212666122173993805 ShowIWanttoWatchEp 视频/ShowIWantto 995.0
1.69406306986304e+ 无题 hls-1.mp4
877482402128334556 ShowIWanttoWatchEp 视频/ShowIWantto 1214.0

Angular 11 不会更新 UI

Angular 11 不会更新 UI

如何解决Angular 11 不会更新 UI

我的一个 Angular 11 组件不会更新 UI,我不知道为什么或我的错误发生在哪里。据我所知,我之前做了 1000 次,但是...

方法 identify() 由单击按钮触发。它通过 REST-API 从服务器加载两个非常大的对象列表。 REST-API 调用经过测试并按预期工作。加载列表中的元素相互比较,计数器 precessed 增加。 控制台输出工作正常,但 UI 未更新。我还尝试了 ApplicationRef.tick() 和所有其他方法来强制更新或 UI。没有任何效果。

只有在 foreach 循环结束后才会将输出写入 UI。

长话短篇:这是简化的代码片段:

服务

  1. loadPrebenSkaters(): Observable<PrebenSkater[]> {
  2. return this.restService.get(''/preben/skaters/preben/all'').pipe(map((response: any) => response.map((item: any) => new PrebenSkater(item))));
  3. }
  4. loadSsnSkaters(): Observable<SsnSkater[]> {
  5. return this.restService.get(''/preben/skaters/ssn/all/'').pipe(map((response: any) => response.map((item: any) => new SsnSkater(item))));
  6. }

组件

  1. identify() {
  2. this.service.loadPrebenSkaters().subscribe((prebenList: PrebenSkater[]) => {
  3. this.service.loadSsnSkaters().subscribe((ssnlist: SsnSkater[]) => {
  4. ssnlist.forEach((ssn: SsnSkater) => {
  5. let found: string[] = prebenList.filter(preben => ...).map(item => item.fullname);
  6. if (found.length) {
  7. ssn.uuid = found;
  8. this.processed++;
  9. } else {
  10. this.processed++;
  11. }
  12. if (this.processed % 10 == 0) {
  13. console.log(this.processed);
  14. }
  15. this.changeDetectorRef.detectChanges();
  16. });
  17. });
  18. });
  19. }

HTML

  1. <button (click)="identify()">Global Identify</button>
  2. <span class="pr-4">Identified: {{ processed }}</span>

有什么我看不到的错误吗?

dbContext 不会更新

dbContext 不会更新

如何解决dbContext 不会更新

我有一个命令类作为 CQRS 工作流的一部分。它插入并更新几个不同的表,如下所示:

  1. public class ClassName : IBusinessCommand<CommandRequest,CommandResult>
  2. private readonly DatabaseContext _dbContext;
  3. public ClassName(DatabaseContext dbContext)
  4. {
  5. _dbContext = dbContext;
  6. }
  7. public async Task<CommandResult> ExecuteAsync(CommandRequest request,CancellationToken token)
  8. {
  9. var user = _dbContext.Users.NoTracking()
  10. .Where(x => x.request.UserId);
  11. if (user != null)
  12. {
  13. var class = new Class
  14. {
  15. ClassID = 1,UserID = user.UserID,CreateDate = _clock.UtcNow
  16. }
  17. _dbContext.Classes.Add(class);
  18. }
  19. var seat = await FunctionThatGetsSeatRecord(token);
  20. seat.ModifyDate = _clock.UtcNow;
  21. seat.SeatsUsed++;
  22. seat.SeatsRemaining--
  23. return CommandResult.WithSuccess();
  24. }

我们有一个名为 CommandRunner 的基类(用于我们所有这样的命令)。在这个基类中,它调用 ExecuteAsync 函数(对于传入的任何类型参数),如下所示:

  1. var command = _container.Resolve<IBusinessCommand<TData,TResult>>(
  2. new TypedParameter(typeof(IHoneyBeeDbContext),dbContext));
  3. var result = await command.ExecuteAsync(data,token);
  4. await dbContext.SaveChangesAsync();
  5. transaction.Commit();

以便对该命令 dbContext 所做的所有更改都作为单个事务保存和提交。 一段时间以来,我们已经为 CQRS 部署了相同的基础设施,并且运行良好。上面的类以前在一个不同的服务类中,我决定将它转换为我们的 CQRS 流,所以我将它变成了一个命令。 由于我无法弄清楚的原因(我已经考虑了几个小时),我可以将创建的类正确添加到数据库中,但是我无法更新座位记录。我已经调试了整个类,并在整个流程中跟踪并检查了 _dbContext 变量,并且更新在那里正确显示,但是当它被保存和提交时,它不会更新该变量的数据库(但它会为类更新) )。 有没有人看到这里有什么问题?

解决方法

您指出返回座位的函数使用 NoTracking()(AsNoTracking() 的错别字?),这会关闭更改跟踪,因此 EF 对您对座位所做的更改视而不见。

不要对您计划查询、更新和保存实体的集合使用“无跟踪”

(在某些 EF 版本或情况下使用它可能根本不会带来任何好处,请参阅 https://github.com/dotnet/efcore/issues/14366)

未跟踪实体的详细信息:What difference does .AsNoTracking() make?

findOneAndUpdate 不会更新,除非我调用“.then()”为什么?

findOneAndUpdate 不会更新,除非我调用“.then()”为什么?

如何解决findOneAndUpdate 不会更新,除非我调用“.then()”为什么?

除非我使用 findOneAndUpdate 处理返回的 promise,否则我终生无法弄清楚为什么我对 .then() 的调用没有更新任何内容。我不在乎调用返回什么,所以我不费心去处理承诺。

这不起作用:

MyModel.findOneAndUpdate({key: ''XXXXX''},{$set: {status: ''complete''}})

这有效:

MyModel.findOneAndUpdate({key: ''XXXXX''},{$set: {status: ''complete''}}).then()

在末尾附加 .then() 肯定不会以任何方式伤害我,但我只是好奇为什么没有它调用就不能工作。它不应该仍然执行查询吗?

这家伙似乎在问同样的问题,但至今仍未解决:Why does MongoDB not update unless I call ".then res.json(...)" after findOneAndUpdate?

解决方法

原因是:"The query executes if callback is passed else a Query object is returned."

.then() 执行函数here

例如,下面的代码将执行 3 个 updateMany() 调用,一个 因为回调,还有两个是因为 .then() 被调用了两次。

const q = MyModel.updateMany({},{ isDeleted: true },function() {
  console.log(''Update 1'');
});

q.then(() => console.log(''Update 2''));
q.then(() => console.log(''Update 3''));

getter 不会更新 Vuex 中的值

getter 不会更新 Vuex 中的值

如何解决getter 不会更新 Vuex 中的值

我不明白 Vuex 中的 getter 是如何工作的。 问题是在 state 和 localStorage 中注销令牌时变空,但在 getter 中不是。 在 public class test { private static WebDriver driver; private static JavascriptExecutor js; private static Actions action; private String COLLECTION = "TestCollection"; @BeforeClass public static void init() { System.setProperty("webdriver.chrome.driver","/Users/michaelionia/Downloads/chromedriver"); ChromeOptions opt = new ChromeOptions(); opt.setExperimentalOption("debuggerAddress","localhost:9222 "); driver = new ChromeDriver(opt); js = (JavascriptExecutor) driver; action = new Actions(driver); driver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS); driver.get("https://www.pexels.com/search/videos/skyline/?orientation=landscape&size=large"); } @Test public void openbrowser() { for (int j = 1; j < 200; j++) { for (int i = 1; i < 4; i++) { try { WebElement preview = driver.findElement(By.xpath("/html/body/div[1]/div[4]/div[6]/div[1]/div[" + i + "]/div[" + j + "]/article")); js.executeScript("arguments[0].scrollIntoView()",preview); new webdriverwait(driver,3).until(ExpectedConditions.elementToBeClickable(preview)).click(); WebElement collectButton = driver.findElement(By.xpath("//*[@id=\\"photo-page-top\\"]/div/div[2]/div/div/button[2]")); new webdriverwait(driver,3).until(ExpectedConditions.elementToBeClickable(collectButton)).click(); for (int k = 1; k < 200; k++) { if (driver.findElement(By.xpath("/html/body/div[2]/div/div/ul/li[" + k + "]")).getText().equals(COLLECTION)) { try { WebElement collection = driver.findElement(By.xpath("/html/body/div[2]/div/div/ul/li[" + k + "]")); collection.click(); driver.findElement(By.xpath("/html/body/div[2]")).sendKeys(Keys.ESCAPE); new webdriverwait(driver,3).until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//*[@id=\\"photo-modal\\"]/div[2]/button")))).click(); } catch (ElementClickInterceptedException e) { continue; } break; } } } catch (NoSuchElementException e) { continue; } } } } } 中,我称之为:

created

并且 created: async function () { if (this.$store.getters.shortToken) { this.isConfirm = true } console.log( ''signining'',localStorage.getItem(''token''),// '''' ''state'',this.$store.state.user.token,// '''' ''getter'',this.$store.getters.token // ''old-token'' ) if (this.$store.getters.token) { await this.$router.push({ path: ''/'' }) } } 有:

getters

还有token: state => { return localStorage.getItem(''token'') || state.user.token }

mutation

但是,创建的控制台登录给了我空的 localStorage 令牌(这是正常的)和空的 state.token(这也是正常的)。但是,getters.token 给了我令牌(这不正常),因为我给了SET_TOKEN 空令牌。为什么会这样?
PS。如果我在 getters 标记中的 SET_TOKEN: (state,payload) => { localStorage.setItem(''token'',payload.token) Object.assign(state,payload) } 上方添加 console.log(state.user.token,localStorage.getItem(''token'')),那么 return 钩子中的 getters.token 是空的... 为什么?
在这种情况下也有一些使用代码,这是注销方法:

created

操作注销

methods: {
    async logout () {
      if (await this.$store.dispatch(''logout'')) {
        console.log(''logged out'')
        await this.$router.push({ path: ''/signin'' })
      }
    }
  }

解决方法

Getter 旨在根据 derived state 计算 store state

您面临这个问题是因为您从 localStorage.getItem() 返回 Getter 的值,它不是 store state 的值,因此它不是 reactive也不observable

在您的示例中,当您调用 localStorage.setItem() 时,Vuex 不会重新计算 Getter 的值。
仅在更改 state.user.token 时才会重新计算 Getter 的值。

因此,如果您想让 Getter 正常工作,只需返回 state.user.token 的值。
您还可以在您的 created 中添加一个 App.vue 钩子,它会检查 localStorage 中是否有令牌并调用 SET_TOKEN 突变,如果这是您试图通过调用来完成的localStorage.getItem 在您的 Getter 中:

App.vue

<script>
    created() {
        const token = localStorage.getItem(''token'');
        if (token != null) {
            this.$store.mutations.SET_TOKEN({ token });
        }
    }
</script>

尽管如此,在使用 Object.assign 时要注意 change detection caveats,因为 Vuex mutations follow Vue''s reactivity rules。

在您的突变中,您可能应该这样做:

SET_TOKEN: (state,payload) => {
    localStorage.setItem(''token'',payload.token);
    state.token = payload.token;
}

或者如果 payload 实际上是 state.user 你可以这样做:

SET_TOKEN: (state,payload.token);
    state.user = {
       ...payload
    }
}

今天关于为什么 Python 的 SQLite3 不会更新的介绍到此结束,谢谢您的阅读,有关Angular 11 不会更新 UI、dbContext 不会更新、findOneAndUpdate 不会更新,除非我调用“.then()”为什么?、getter 不会更新 Vuex 中的值等更多相关知识的信息可以在本站进行查询。

本文标签: